Python: отсортируйте список и измените другой, следовательно,

У меня есть два списка: каждый содержит ряд x точки, другой содержит точки y. Python так или иначе удается смешаться, x подчеркивает, или пользователь мог. Я должен был бы отсортировать их по самому низкому к самому высокому, и переместить y точки для следования за их x корреспондентами. Они находятся в двух отдельных списках.. как я делаю это?

16
задан Gabriele Cirulli 28 April 2010 в 20:41
поделиться

4 ответа

Вы можете заархивировать списки и отсортировать результаты. Сортировка кортежей по умолчанию должна выполняться по первому элементу .

>>> 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]
18
ответ дан 30 November 2019 в 15:47
поделиться

Если x и y должны быть одной единицей (например, точкой), было бы разумнее хранить их как кортежи, а не два отдельных списка.

Тем не менее, вот что вам следует сделать:

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

zipped_list = zip(x,y)
sorted_list = sorted(zipped_list)
4
ответ дан 30 November 2019 в 15:47
поделиться
>>> 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]
10
ответ дан 30 November 2019 в 15:47
поделиться
>>> 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)
16
ответ дан 30 November 2019 в 15:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: