#python #list #sorting
#питон #Список #сортировка
Вопрос:
Я хочу отсортировать списки следующим образом:
вход:
mylist = [['12','25'],['4','7'],['12','14']]
выход:
[['4','7'],['12','14'],['12','25']]
текущий код, который я использую, сортирует только первое число списков:
def defe(e): return int(e[0]) mylist = [['12','25'],['4','7'],['12','14']] mylist.sort(key=defe) print(mylist)
выход:
[['4','7'],['12','25'],['12','14']]
Комментарии:
1. вы просто хотите
mylist.sort()
, чтобы последовательности уже были отсортированы лексикографически . Однако ваша сортировка строк, а не ints. Так что вы, вероятно , просто хотите преобразовать все в ints,mylist = [[int(x) for x in sub] for sub in mylist]
а затем просто использоватьmylist.sort()
2. Обратите внимание, что «переменная» — это неправильная терминология здесь.
3. Встроенный python
sort()
будет использовать первую запись списка в качестве первичного ключа сортировки, вторую-в качестве вторичного ключа сортировки и так далее. Он уже делает то, что вы хотите-удалите параметр «ключ»:mylist.sort()
даст вам то, что вы хотите4.
sorted([['12','25'],['4','7'],['12','14']], key=lambda sl:(list(map(int,sl))))
5. Примечание: вы также можете просто сначала выполнить сортировку по 2-му номеру, а затем отсортировать этот результат по первому номеру (потому что сортировка стабильна).
Ответ №1:
Попробуй:
sorted(mylist, key=lambda x: (int(x[0]), int(x[1])))
Выход:
[['4', '7'], ['12', '14'], ['12', '25']]
Если подсписки длиннее 2, то
sorted(mylist, key=lambda x: list(map(int, x)))
так лучше.