Упорядочить список кортежей другим отсортированным перечисленным списком - PullRequest
1 голос
/ 18 апреля 2020

У меня есть один список кортежей: a = [(10, 11), (5, 5), (2, 3), (6, 7), (8, 3), (9, 2)] и один простой список со значениями b = [10, 9, 10, 2, 8, 3]. Затем я перечисляю второй список и сортирую его для некоторых целей.

b_enumerated = list(enumerate(b))
# [(0, 10), (1, 9), (2, 10), (3, 2), (4, 8), (5, 3)]
b_sorted = sorted(b_enumerated, key=lambda x: x[1], reverse=True)
# [(0, 10), (2, 10), (1, 9), (4, 8), (5, 3), (3, 2)]

Теперь я хочу изменить свой первый список в соответствии со вторым отсортированным списком, поэтому я ожидаю получить [(10, 11), (2, 3), (5, 5), (8, 3), (9, 2), (6, 7)] (кортежи оригинала список в порядке индекса упорядоченного списка: 0, 2, 1, 4, 5, 3), где, например, мой перечисляемый первый список - [(0, (10, 11)), (1, (5, 5)), (2, (2, 3)), (3, (6, 7)), (4, (8, 3)), (5, (9, 2))].

Как мне достичь ожидаемого результата? Возможно, мне нужно использовать какое-то индексирование, потому что сортировка сжатых списков не помогла.

Спасибо.

Ответы [ 2 ]

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

Если целью является сортировка a с обратным порядком b, вам не нужно перечислять b и сортировать перечисляемую последовательность, чтобы сначала создать промежуточный список b_sorted.

Вместо этого вы можете сжать b с помощью a для сортировки и затем вывести только второй элемент в результирующей последовательности кортежей:

[t for _, t in sorted(zip(b, a), reverse=True)]

Возвращает:

[(10, 11), (2, 3), (5, 5), (8, 3), (9, 2), (6, 7)]
0 голосов
/ 18 апреля 2020

Быстрый ответ

a_sorted =  [a[i[0]] for i in b_sorted]

Краткое объяснение

Вы в основном пытаетесь сказать "отправить a[0] на a_sorted[0] отправить a[1] на a_sorted[2] ... отправить a[i] на a_sorted[b_sorted[i][0]] '.

Это можно сделать с помощью кода

a_sorted =  [a[b_sorted[i][0]] for i in range(len(b_sorted))]

, который работает нормально, но может быть сокращается и, возможно, сокращается, вместо этого перебирая b_sorted.

a_sorted =  [a[i[0]] for i in b_sorted]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...