2017-07-14 52 views

回答

4

这是一个简单的列表理解(注意我asuming让所有的值float做得相当比int S和float秒的混合物):

>>> lst = [0,2,3,5,6,7,9] 
>>> [(a + b)/2.0 for a,b in zip(lst, lst[1:])] 
[1.0, 2.5, 4.0, 5.5, 6.5, 8.0] 

(由2.0除以保证地板事业部在Python 2)不施加

1
values = [0,2,3,5,6,7,9] 
middle_values = [(values[i] + values[i + 1])/2.0 for i in range(len(values) - 1)] 

除以2.0而非2是在Python 3是不必要的,或如果使用from __future__ import division到昌e整数除法行为。

zipitertools.izip答案比较习惯。

0

[(l[i]+l[i+1])/2 for i in range(len(l)-1)]

0

简单的for循环:作为期望

nums = [0,2,3,5,6,7,9] 
betweens = [] 
for i in range(1, len(nums)): 
    if nums[i] - nums[i-1] > 1: 
     betweens.extend([item for item in range(nums[i-1]+1, nums[i])]) 
    else: 
     betweens.append((nums[i] + nums[i-1])/2) 

输出,其不需要(在Python3.x)进一步转化:

[1, 2.5, 4, 5.5, 6.5, 8] 
+0

什么是有条件的'extend'分支试图做什么? –

+0

嗯,如果nums [i] --nums [i-1]> 1:'和'betweens.extend(项目在范围内的项目(nums [i-1],nums [i])'''是什么?问题是操作系统表示相差超过1的数字应该区别对待 –

+0

@Rawing处理多个数字 –

1

强制性itertools溶液:

>>> import itertools 
>>> values = [0,2,3,5,6,7,9] 
>>> [(a+b)/2.0 for a,b in itertools.izip(values, itertools.islice(values, 1, None))] 
[1.0, 2.5, 4.0, 5.5, 6.5, 8.0] 
3

使用for循环:

>>> a = [0,2,3,5,6,7,9] 
>>> [(a[x] + a[x + 1])/2 for x in range(len(a)-1)] 
[1.0, 2.5, 4.0, 5.5, 6.5, 8.0] 

然而,使用拉链作为@Chris_Rands所述比较好...(更可读¬¬)