Python 3.x - отсортировать один список на основе другого списка и затем вернуть оба отсортированных списка - PullRequest
1 голос
/ 04 апреля 2020

Проблема: Я хотел бы отсортировать один список на основе другого списка и затем вернуть оба отсортированных списка.

Я делаю это так:

points = [4,7,3,2,7]
candidates = ['a', 'b', 'c', 'd', 'e']

ordered_candidates = [x for _, x in sorted(zip(points, candidates), reverse=True)]
ordered_points = sorted(points, reverse=True)

Вопрос : возможно ли объединить последние две строки в одну строку?

Я нашел вопрос: Сортировка списка по значениям из другого списка? но это не совсем то, что я прошу.

Ответы [ 2 ]

1 голос
/ 04 апреля 2020

Возможно ли объединить последние две строки в одну строку?

Да, это так. ordered_candidates исключает баллы из результата, поскольку вы выбираете только кандидатов с [x for _, x in...]. Это в основном только выбирает элемент second из каждого кортежа. Кроме того, ordered_points сортирует только баллов. Они оба также сортируются в обратном порядке с reverse=True.

Похоже, вы можете просто изменить ordered_candidates, чтобы включить оба элемента в пары (point, candidate).

>>> points = [4,7,3,2,7]
>>> candidates = ['a', 'b', 'c', 'd', 'e']
>>> sorted(zip(points, candidates), reverse=True)
[(7, 'e'), (7, 'b'), (4, 'a'), (3, 'c'), (2, 'd')]
0 голосов
/ 04 апреля 2020

Это можно сделать следующим образом:

  • слегка изменить, что сохранить во внутреннем понимании списка
  • распаковать это понимание списка
  • сжать распакованное данные, в которых результаты хранятся в двух кортежах той же длины, что и исходные входы, но с сохранением соответствующей сортировки
  • , распаковывающей результаты в две переменные в одной строке
points = [4,7,3,2,7]
candidates = ['a', 'b', 'c', 'd', 'e']

ordered_candidates, ordered_points = zip(*[(p, c) for p, c in sorted(zip(points, candidates), reverse=True)])```
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...