Как sorted () работает для списков внутри списков - PullRequest
0 голосов
/ 06 ноября 2018

Я не понимаю, как списки внутри списков сортируются.

L = [[1,1,1],[0,9,0],[2,1,1]]

sorted(L) возврат [[0, 9, 0], [1, 1, 1], [2, 1, 1]]

Это означает, что он не основан на сумме, так как 0 + 9 + 0 больше, чем оба других.

Ответы [ 2 ]

0 голосов
/ 06 ноября 2018

Встроенный sorted считает каждый элемент итерируемого по очереди . Так, например, [0, 9, 0] появляется первым, потому что 0 < 1 и 0 < 2.

Чтобы помочь обрести интуицию, вы можете протестировать несколько примеров:

[0,9,0] < [1,1,1]  # True
[0,9,0] < [0,8,0]  # False
[1,1,1] < [2,1,1]  # True

Итак, sorted работает в соответствии с тем, как определяются операторы сравнения. Объекты последовательности в Python обычно поддерживают лексикографическое сравнение . Для сортировки по сумме каждого списка необходимо передать функцию в аргумент key, в данном случае встроенный sum:

res = sorted(L, key=sum)
0 голосов
/ 06 ноября 2018

Нет, оно основано на всех элементах итератора, начиная с первого элемента итератора

sorted(L,key=lambda x:(x[0],x[1],x[2]) #==sorted(L)

В случае необходимости на сумму

sorted(L,key=sum) 

Более упрощенная версия вышеприведенного кода для дальнейшего понимания ключевого аргумента

print(sorted(L,key=lambda x: x[0]+x[1]+x[2]))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...