Здесь вы можете использовать функцию zip()
, чтобы сделать это красиво. Сначала мы упаковываем значения в пары.
Вы можете использовать sorted()
для сортировки значений. Для сортировки будет использоваться первое значение кортежа, поэтому мы помещаем элемент, который мы хотим отсортировать, первым.
Теперь мы используем zip с оператором splat, чтобы отменить процедуру архивирования, в результате чего получается хороший однострочный:
yVars, xVars = zip(*sorted(zip(yVars, xVars)))
Который производит желаемый результат:
>>> xVars = [1,2,3,4,5]
>>> yVars = [9,7,1,3,5]
>>> yVars, xVars = zip(*sorted(zip(yVars, xVars)))
>>> xVars
(3, 4, 5, 2, 1)
>>> yVars
(1, 3, 5, 7, 9)
Обратите внимание, что это кортежи, поэтому, если вам снова нужны списки, просто выполните yVars, xVars = list(yVars), list(xVars)
впоследствии.
Если вы хотите расширить это до более чем двух списков, просто добавьте больше аргументов в zip, и он вернет больше.
Обратите внимание, что это будет сортировать по первому значению, а затем по второму значению при столкновениях. Это означает, что если у вас есть повторяющиеся значения, порядок может отличаться от ожидаемого. В этом случае вы можете указать свой ключ абсолютно:
yVars, xVars = zip(*sorted(zip(yVars, xVars), key=lambda item: item[0]))