获取列表值之间的中间值列表

时间:2017-07-14 15:28:43

标签: python python-2.7 list

我有一个值列表:[0,2,3,5,6,7,9],并希望获得每个数字之间的中间数字列表:[1, 2.5, 4, 5.5, 6.5, 8]。在python中有一种巧妙的方法吗?

6 个答案:

答案 0 :(得分:4)

这是一个简单的列表理解(请注意,我希望您的所有值都是float而不是intfloat 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

zipitertools.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]