我有一個值列表:[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