@bzupnick, используй key=lambda x:x[2].casefold(). Если ваш Python недостаточно новый, просто используйте .lower()вместо него.casefold()
John La Rooy
x = [[[5,3], 1.0345], [[5,6], 5.098], [[5,4], 4.89], [[5,1], 5.97]] С таким списком можно мы сортируем, используя itemgetter () относительно элементов в x [0] [1]?
nidHi
Могу ли я также получить индексы такого рода, чтобы отсортировать другой связанный список списков в том же порядке?
дикий
@quaryk Звучит как интересный вопрос, но не подходит для ответа в комментариях. Если вы не можете найти вопрос, который его охватывает, вы должны создать его.
Джон Ла Рой
175
на месте
>>> l =[[0,1,'f'],[4,2,'t'],[9,4,'afsd']]>>> l.sort(key=lambda x: x[2])
Не могли бы вы дать более подробную информацию о in placeи not in place?
Qun
9
@qun, «на месте» означает, что память старого списка повторно используется для отсортированного. «не на месте» означает, что старый список остается неизменным и создается новый список.
Джон Ла Рой
x = [[[5,3], 1.0345], [[5,6], 5.098], [[5,4], 4.89], [[5,1], 5.97]] с таким списком: как мы можем отсортировать по элементам в x [0] [1]?
nidHi
81
Itemgetter позволяет сортировать по нескольким критериям / столбцам:
Я думаю, что этот ответ очень важен. Я думаю, что люди, пытающиеся сортировать по индексам внутреннего массива, упадут здесь, но люди, ищущие сортировку по индексам внутренних массивов MULTIPLE, начнут здесь, и ваш ответ помог мне увидеть, что itemgetter действительно сделает это за вас!
ZekeDroid
11
множественные критерии также могут быть реализованы с помощью лямбда-функции
Я думаю, что лямбда-функция может решить вашу проблему.
old_list =[[0,1,'f'],[4,2,'t'],[9,4,'afsd']]#let's assume we want to sort lists by last value ( old_list[2] )
new_list = sorted(old_list, key=lambda x: x[2])#Resulst of new_list will be:[[9,4,'afsd'],[0,1,'f'],[4,2,'t']]
**old_list =[[0,1,'f'],[4,2,'t'],[9,4,'afsd']]#let's assume we want to sort lists by last value ( old_list[2] )
new_list = sorted(old_list, key=lambda x: x[2])**
поправьте меня, если я ошибаюсь, но разве «x [2]» не вызывает третий элемент в списке, а не третий элемент во вложенном списке? это должно быть х [2] [2]?
Нет, потому что ключ / лямбда уже перебирает элементы списка первого уровня. x - локальная переменная, связанная с каждым элементом по очереди.
DragonLord
1
Более легко понять (что на самом деле делает Lambda):
ls2=[[0,1,'f'],[4,2,'t'],[9,4,'afsd']]def thirdItem(ls):#return the third item of the listreturn ls[2]#Sort according to what the thirdItem function return
ls2.sort(key=thirdItem)
arr=[[2,1],[1,2],[3,5],[4,5],[3,1],[5,2],[3,8],[1,9],[1,3]]
arr.sort(key=lambda x:x[0])
la=set([i[0]for i inPoints])for i in la:
tempres=list()for j in arr:if j[0]==i:
tempres.append(j[1])for j in sorted(tempres,reverse=True):print(i,j)
Ответы:
Это работа для itemgetter
Здесь также можно использовать лямбда-функцию, однако в этом простом случае лямбда-функция работает медленнее.
источник
key=lambda x:x[2].casefold()
. Если ваш Python недостаточно новый, просто используйте.lower()
вместо него.casefold()
на месте
не на месте, используя сортировку:
источник
in place
иnot in place
?Itemgetter позволяет сортировать по нескольким критериям / столбцам:
источник
множественные критерии также могут быть реализованы с помощью лямбда-функции
источник
Вы можете легко отсортировать, используя этот фрагмент, где 1 - индекс элемента.
источник
Как это:
источник
Я думаю, что лямбда-функция может решить вашу проблему.
источник
поправьте меня, если я ошибаюсь, но разве «x [2]» не вызывает третий элемент в списке, а не третий элемент во вложенном списке? это должно быть х [2] [2]?
источник
Более легко понять (что на самом деле делает Lambda):
источник
Сортировка многомерного массива выполнить здесь
источник