我有一个值列表:[0,2,3,5,6,7,9]
,并希望获得每个数字之间的中间数字列表:[1, 2.5, 4, 5.5, 6.5, 8]
。在python中有一种巧妙的方法吗?
答案 0 :(得分:4)
这是一个简单的列表理解(请注意,我希望您的所有值都是float
而不是int
和float
s的混合物:
>>> 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 :(得分: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]
然而使用zip作为@Chris_Rands说更好......(并且更具可读性)
答案 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)]
在Python 3中,或者使用2.0
更改整数除法行为时,不需要除2
而不是from __future__ import division
。
zip
或itertools.izip
答案更为惯用。
答案 3 :(得分: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]
答案 4 :(得分:0)
[(l[i]+l[i+1])/2 for i in range(len(l)-1)]
答案 5 :(得分:0)
简单的循环:
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]