Сортировка и замена значений кортежей / кортежей в Python - PullRequest
0 голосов
/ 28 мая 2018

У меня есть список кортежей в Python, и я хотел бы отсортировать их по второму значению кортежа (это строка, поэтому я хотел бы отсортировать их в алфавитном порядке) и поменять местами первые значения кортежей,Например, скажем, у нас есть какой-то список:

lst = [(1, "z"), (2, "a"), (3, "b")]

Я бы хотел, чтобы конечный результат был таким:

result = [(1, "a"), (2, "b"), (3, "z")]

Возможно ли это сделать с помощью встроенного метода илиЯ должен написать свою собственную функцию?

Ответы [ 4 ]

0 голосов
/ 28 мая 2018

Это не одна строка, но если вы хотите, вы можете попробовать:

lst = [(1, "z"), (2, "a"), (3, "b")]

first=[]
second=[]

for i,j in lst:
    first.append(i)
    second.append(j)

print(list(zip(sorted(second),first)))
0 голосов
/ 28 мая 2018

Вот функциональное решение:

from operator import itemgetter

lst = [(1, "z"), (2, "a"), (3, "b")]

res = list(zip(map(itemgetter(0), lst), sorted(map(itemgetter(1), lst))))

print(res)

[(1, 'a'), (2, 'b'), (3, 'z')]

Обратите внимание, что вы не должны именовать переменные после встроенных модулей: используйте lst вместо list.

0 голосов
/ 28 мая 2018

Разделите список на два с помощью старого zip(*lst) транспонированного трюка, затем отсортируйте 2-й список и zip их вместе:

lst = [(1, "z"), (2, "a"), (3, "b")]

lst1, lst2 = zip(*lst)
result = list(zip(lst1, sorted(lst2)))

# lst1: (1, 2, 3)
# lst2: ('z', 'a', 'b')
# result: [(1, 'a'), (2, 'b'), (3, 'z')]
0 голосов
/ 28 мая 2018

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

lst = [(1, "z"), (2, "a"), (3, "b")]
sort_l = [(a, c) for [a,_ ], c in zip(lst, sorted(b for _, b in lst))]

Выход:

[(1, 'a'), (2, 'b'), (3, 'z')]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...