我有两个列表:一个包含一组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