Как получить длину самой длинной строки во вложенном списке строк? - PullRequest
2 голосов
/ 20 марта 2019

Новичок в Python здесь. Я пытаюсь найти самую длинную длину значения в серии вложенных списков. Вот пример списка типов:

tableData = [['apples', 'oranges', 'cherries', 'banana'],
             ['Alice', 'Bob', 'Carol', 'David'],
             ['dogs', 'cats', 'moose', 'goose']]

Ответ, который я хочу здесь получить, - 8, но это может измениться, если список обновится.

Когда я использую print(len(tableData)), я получаю 3, количество вложенных списков. Я также не могу заставить работать цикл, который решает это.

Извините, что это действительно простой вопрос, но я в растерянности.

Заранее спасибо за помощь.

Ответы [ 7 ]

6 голосов
/ 20 марта 2019

Как вы заметили, len(tableData) дает количество элементов tableData.То, что вы хотите, это максимальная длина элементов элементов из tableData:

l = max(len(x) for sublist in tableData for x in sublist)

>>> print(l)
8
4 голосов
/ 20 марта 2019

Переберите каждый элемент и получите его len() для сравнения.

tableData = [['apples', 'oranges', 'cherries', 'banana'],
             ['Alice', 'Bob', 'Carol', 'David'],
             ['dogs', 'cats', 'moose', 'goose']]

maxCount = 0
for lst in tableData:
    for elem in lst:
        maxCount = max(maxCount, len(elem))

print(maxCount)

ВЫХОД :

8
3 голосов
/ 20 марта 2019
from itertools import chain

chain.from_iterable(tableData)

Теперь это ведет себя так, как если бы у вас был один длинный список отдельных значений вместо списка списков значений.Теперь тривиально найти самый длинный элемент в этом плоском списке:

max(chain.from_iterable(tableData), key=len)

Это возвращает 'cherries'.

max(map(len, chain.from_iterable(tableData)))

Это возвращает 8.

2 голосов
/ 20 марта 2019
>>> import numpy as np
>>> data=np.array([['apples', 'oranges', 'cherries', 'banana'],
             ['Alice', 'Bob', 'Carol', 'David'],
             ['dogs', 'cats', 'moose', 'goose']]).reshape(-1)
>>> max(data,key=len)
'cherries'
>>> len(max(data,key=len))
8

Вклад моей части в этот ответ.

1 голос
/ 20 марта 2019
maxLength = 0
for row in tableData:
    maxRowElementLength = len(max(row, key=len))
    if maxLength < maxRowElementLength:
        maxLength = maxRowElementLength

print(maxLength)
1 голос
/ 20 марта 2019

Вы можете попробовать с циклом ...

l = 0 
for row in tableData: 
     for col in row: 
         l = len(col) if l < len(col) else l 
1 голос
/ 20 марта 2019

Возможно, это будет работать для вас:

new_list = []
for sub_list in tableData:
    for item in sub_list:
        new_list.append(item)

max_element = max(new_list, key=len)

print(max_element) # this actually prints the item
print(len(max_element)) # this will give you the length
...