Максимальная длина списка из списка списков, используя max с ключом - PullRequest
0 голосов
/ 10 сентября 2018

Я хотел бы улучшить мое понимание относительно аргумента key встроенной функции max. Пожалуйста, рассмотрите следующий пример:

У меня есть список списков, и я хочу найти самый длинный. Я могу написать прямое решение:

maximum = 0
for l in lists:
   maximum = max(maximum, len(l))

Однако я бы предпочел избегать явного цикла for, использующего аргумент key max. Насколько я понимаю, ключ будет применять свой аргумент к каждому элементу входных данных, а затем сравнивать эти выходные данные. Так что это должно работать:

maximum = max(lists, key=len)

Я полагаю, что это должно сработать, потому что, согласно моему (очевидно ложному) пониманию, приведенное выше утверждение будет эквивалентно применению длины к каждому элементу, а затем вызову max:

max([len(l) for l in text_tokenized])

Чего мне не хватает?

1 Ответ

0 голосов
/ 10 сентября 2018

Я полагаю, что это должно сработать, потому что, согласно моему (очевидно ложному) пониманию, приведенное выше утверждение будет эквивалентно применению длины к каждому элементу, а затем вызову max:

Нет, код

maximum = max(lists, key=len)

Значит, найти "элемент" из lists, имеющий максимальное значение len(element)

Принимая во внимание, что вы намеревались найти значение len(element). одна строка кввилента вашего кода:

maximum = 0
for l in lists:
   maximum = max(maximum, len(l))

будет

max(map(len, lists))

или может использовать len(max(lists, key=len))

...