2015-01-27 2 views
0

Учитывая следующую структуру данных, как мне получить максимальную длину символов внутри нее?Понимание нескольких списков

data = [['a', 'b'], ['cc', 'dd']] 

Самый большой пункт «куб.см» так, что ответ будет 2. Вот то, что я до сих пор, но это неверно.

max_chars = [len(item) for item for item in data] 
+1

Google как сплющивающиеся список списков и как использовать 'MAX()' с ключом. –

ответ

3

Это должно сделать это

max_chars = max(len(item) for lst in data for item in lst) 
+1

Вы можете даже сбросить '[]' :-) – mgilson

+0

@mgilson nice;) – bnjmn

0

Макс берет key функцию:

>>> max([['a', 'b'], ['cc', 'dd']], key=lambda l: max(len(e) for e in l)) 
['cc', 'dd'] 
>>> max([['a', 'bbb'], ['cc', 'dd']], key=lambda l: max(len(e) for e in l)) 
['a', 'bbb'] 

Это печатает подсписок с самым длинным элементом. Если вы хотите, чтобы значение длины и индекса индивидуального подсписка, вы могли бы сделать:

>>> data=[['a', 'bbb'], ['cc', 'dd']] 
>>> maxes=((i, len(max(l, key=len))) for i, l in enumerate(data)) 
>>> max(maxes, key=lambda t:t[1]) 
(0, 3)   # first element is the sublist index, second the length 
+0

У вас это не так :) –

+0

Это возвращает подсписку с самым длинным ** первым ** элементом - например, если ' data = [['x', 'weeeeeee'], ['yy', 'x']] 'this возвращает второй подсписчик. Это кажется легким вдали от того, о чем просили ОП. –

+0

Попробуйте это со следующим вводом: '[['a', 'bbbbbbb'], ['cc', 'dd']]' Я думаю, что ваш ответ вернет '['cc', 'dd']' который я Я уверен, что это не то, что хочет OP, независимо от того, как вы его нарезаете :-) – mgilson

1

Мне не нравится вложенные списковый. Их трудно читать.

Используя itertools, вы можете сгладить данные, а затем найти максимальную длину.

import itertools 
flat = itertools.chain(*data) 
result = max(len(i) for i in flat) 

Обратите внимание, что flat является итерацию объект, который трудно проверять, но list(flat) возвращает ['a', 'b', 'cc', 'dd']

Смежные вопросы