我有兩個列表:一個包含一組x點,另一個包含y點。 Python以某種方式管理混合x點,或用戶可以。我需要按照從最低到最高的順序對它們進行排序,並且移動y點以跟隨它們的x個對應點。他們在兩個單獨的名單..我該怎麼做?Python:對列表進行排序並相應地更改另一個列表
回答
您可以壓縮列表並對結果進行排序。排序元組時,默認情況下,應該排序第一個成員。
>>> xs = [3,2,1]
>>> ys = [1,2,3]
>>> points = zip(xs,ys)
>>> points
[(3, 1), (2, 2), (1, 3)]
>>> sorted(points)
[(1, 3), (2, 2), (3, 1)]
然後再解壓它們:
>>> sorted_points = sorted(points)
>>> new_xs = [point[0] for point in sorted_points]
>>> new_ys = [point[1] for point in sorted_points]
>>> new_xs
[1, 2, 3]
>>> new_ys
[3, 2, 1]
如果x和y的意思是一個單元(如一個點),它將使更多的意義將它們存儲爲元組而不是兩個單獨的列表。
無論如何,這裏是你應該做的:
x = [4, 2, 5, 4, 5,…]
y = [4, 5, 2, 3, 1,…]
zipped_list = zip(x,y)
sorted_list = sorted(zipped_list)
我會這樣做,但matplotlib使用這樣的列表 – 2010-04-28 20:55:09
>>> xs = [5, 2, 1, 4, 6, 3]
>>> ys = [1, 2, 3, 4, 5, 6]
>>> xs, ys = zip(*sorted(zip(xs, ys)))
>>> xs
(1, 2, 3, 4, 5, 6)
>>> ys
(3, 2, 6, 4, 1, 5)
如果你有大量的項目,你可能不想使用'zip(* sorted(...))'。參數拆包'*'不能像'zip(xs,ys)'那樣有效地完成任務,因爲它必須傳遞與列表中的元組相同數量的參數。 – 2010-04-28 21:13:29
>>> import numpy
>>> sorted_index = numpy.argsort(xs)
>>> xs = [xs[i] for i in sorted_index]
>>> ys = [ys[i] for i in sorted_index]
如果你能numpy.array工作
>>> xs = numpy.array([3,2,1])
>>> xs = numpy.array([1,2,3])
>>> sorted_index = numpy.argsort(xs)
>>> xs = xs[sorted_index]
>>> ys = ys[sorted_index]
最後兩行可以安全地組合爲'xs,ys = [v [sorted_index] for v in [xs,ys]]'? – 2017-11-12 15:00:45
- 1. 如何根據另一個列表對列表進行排序?
- 2. 使用另一個列表對一個鏈表進行排序
- 3. Python:使用另一個列表作爲訂單對列表進行排序
- 4. 排序表,並相應地改變行列時,一個新的行插入
- 5. Rails按列名在另一個表中對列進行排序
- 6. 排序列表相對於另一個列表
- 7. 根據我如何用Python對另一個2D列表行進行排序來排序2D列表
- 8. 基於另一個列表對動態對象列表進行排序
- 9. Python - 對數字列表進行排序
- 10. Python:對列表進行排序
- 11. 按另一個列表的順序對一個列表排序
- 12. Python從另一個列表中排序一個列表
- 13. 相對於列表中最接近的數字對列表進行排序python
- 14. 基於另一個列表對元組進行排序
- 15. 根據另一個列表值對列表的索引值進行排序
- 16. 使用來自另一個列表的比較對列表進行排序
- 17. 針對列值相對另一列更改的SQL的列表
- 18. 基於元組列表對元組列表進行排序 - Python
- 19. Python按列表中字典的值對列表進行排序
- 20. Python - 用約束對一個列表進行隨機排序
- 21. 對一個元組列表進行排序Python
- 22. 按兩列對列表進行排序
- 23. 更改一個列表更改了另一個列表
- 24. 對與另一個陣列相關的數組進行排序
- 25. 用numpy對另一個列表中的行和列進行排序
- 26. 對列表框相對於另一個排序
- 27. Python:如何根據另一個列表排序列表
- 28. 對陣列進行排序並將位置更改應用到另一個陣列
- 29. Python如何根據另一個列表根據它們的屬性對對象列表進行排序
- 30. 基於python中的單個列表對多個列表進行排序
謝謝!棒極了! – 2010-04-28 20:54:03
或者,通過沒有兩個單獨的列表來保持點正確關聯,但保留元組列表。 – 2010-04-28 21:04:42
閱讀Mike Graham的回答。你也可以使用'zip'來解開元組。 – 2010-04-28 21:10:11