Сортировать только определенный индекс в Python с соответствующей парой - PullRequest
0 голосов
/ 05 июня 2018

У меня есть список, который содержит следующее

a= [june,32,may,67,april,1,dec,99]

Я хочу отсортировать только числа в порядке убывания, но он должен отображаться с соответствующей парой:

Output Expected
----------------
dec,99,may,67,june,32,april,1

Я пыталсясортировка с использованием команды a.sort(reverse=True) в списке, которая не приводит к ожидаемому выводу, это сильно сбивает с толку.

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Можно сначала создать вложенные списки, содержащие пару месяц-значение, применить sorted, а затем сгладить:

a= ['june',32,'may',67,'april',01,'dec',99]
new_a = sorted([[a[i], a[i+1]] for i in range(0, len(a), 2)], key=lambda x:x[-1], reverse=True)
final_a = [i for b in new_a for i in b]

Вывод:

['dec', 99, 'may', 67, 'june', 32, 'april', 1]
0 голосов
/ 05 июня 2018

Вы можете использовать список кортежей:

a = ['june', '32', 'may', '67', 'april', '01', 'dec', '99']

zipper = zip(a[::2], a[1::2])

res = sorted(zipper, key=lambda x: -int(x[1]))  # or, int(x[1]) with reverse=True

print(res)

[('dec', '99'), ('may', '67'), ('june', '32'), ('april', '01')]

Если вам нужно сгладить, используйте itertools.chain:

from itertools import chain

res = list(chain.from_iterable(res))

['dec', '99', 'may', '67', 'june', '32', 'april', '01']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...