我有一个值列表:[0,2,3,5,6,7,9]
并希望获得每个数字之间的中间数字列表:[1, 2.5, 4, 5.5, 6.5, 8]
。 python中有没有一种简洁的方法可以做到这一点?获取列表中值之间的中间值列表
回答
这是一个简单的列表理解(注意我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)不施加
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整数除法行为。
zip
或itertools.izip
答案比较习惯。
[(l[i]+l[i+1])/2 for i in range(len(l)-1)]
简单的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]
什么是有条件的'extend'分支试图做什么? –
嗯,如果nums [i] --nums [i-1]> 1:'和'betweens.extend(项目在范围内的项目(nums [i-1],nums [i])'''是什么?问题是操作系统表示相差超过1的数字应该区别对待 –
@Rawing处理多个数字 –
强制性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]
使用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所述比较好...(更可读¬¬)
- 1. 在Elixir中,列表获取中间值?
- 2. 获取C#中两个列表之间的清单列表
- 3. 获取几列之间的最小值
- 4. 从列表中获取值
- 5. 从列表中获取值
- 6. 从列表中获取值
- 7. 查找R中列表之间的差异:获取与布尔值或列表位置相反的值
- 8. 发送两个列表之间的值
- 9. 当从表中获取值时,在列表框之间移动数据
- 10. Python:从两个值之间的列表中删除所有值
- 11. SQL查询显示不同表中列值之间的值
- 12. Haskell中两个列表中的值与列表理解之间的差异
- 13. 从列表中获取列值
- 14. 获取值列表的优化列表
- 15. xquery-如何获得数值列表中连续值之间的差异
- 16. 如何获取MongoTemplate中两个限制之间的列值?
- 17. 落在一定值的列表元素之间串联列表中的元素
- 18. 获取列表中的两个日期时间之间的所有时间
- 19. 从复选框中获取值HTML列表中的列表
- 20. 获取值的列表中的NSDictionary
- 21. 列表HTML/CSS列之间的间距
- 22. 如何获取列中两个值之间的平均值,并将这个值置于Excel之间?
- 23. Reg表达式获取xml中的标签之间的值
- 24. 正则表达式验证的时间值或时间的列表中的值
- 25. 获取散列表中的所有值
- 26. 的Python:从列表中获取值
- 27. 获取所有选中值的列表
- 28. 如何获取Data.AVL.Tree中的值列表?
- 29. 获取单元格中的值列表
- 30. 从列表中获取不同的值
则可以使用阵列的步骤'一个[:: 2] ' – T4rk1n