2017-07-14 54 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所述比較好...(更可讀¬¬)