繁体   English   中英

Python:对列表进行排序并因此更改另一个列表

[英]Python: sort a list and change another one consequently

我有两个列表:一个包含一组x点,另一个包含y个点。 Python以某种方式设法混合x点,或者用户可以。 我需要按从最低到最高的顺序对它们进行排序,然后移动y点以跟随它们的x对应项。 它们分为两个单独的列表..我该怎么办?

您可以压缩列表并对结果进行排序。 默认情况下,排序元组应该对第一个成员进行排序。

>>> 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]
>>> 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)
>>> 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]

如果x和y意味着是一个单元(例如一个点),那么将它们存储为元组而不是两个单独的列表会更有意义。

无论如何,这是你应该做的:

x = [4, 2, 5, 4, 5,…]
y = [4, 5, 2, 3, 1,…]

zipped_list = zip(x,y)
sorted_list = sorted(zipped_list)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM