Как получить наибольшую длину строки из массива списков из каждого списка, соответствующего индексу? - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть массив списков в форме

list = [['hello','hi','hey'],['where','when','why'],['him','herself','themselves']]

Я хочу сравнить длину от list[0][0] до list[1][0] и list[2][0], в основном все первые индексы, и получить длинусамого длинного размера строки.

он должен перебирать список, потому что количество элементов и количество списков в списке может быть любого размера.

например, ответ должен быть

length1 = 5
length2 = 6 #('herself' is longer than 'hi' and 'when')
length3 = 10

ТИА!

Ответы [ 3 ]

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

Множество способов сделать это в Python.

array = [['hello','hi','hey'],
         ['where','when','why'],
         ['him','herself','themselves']]

length1 = 0
for elem in array:
    if length1 < len(elem[0]):
        length1 = len(elem[0])

length2 = max(array, key=lambda elem: len(elem[1]))

from itertools import accumulate
length3 = accumulate(array,
        lambda e1, e2: max(len(e1[2]), len(e2[2]))

В качестве примечания, как правило, не рекомендуется присваивать что-либо стандартным идентификаторам, например list.

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

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

L = [['hello','hi','hey'],['where','when','why'],['him','herself','themselves']]

# list comprehension
res_list = [max(map(len, i)) for i in zip(*L)]

[5, 7, 10]

# dictionary from enumerated generator expression
res_dict = dict(enumerate((max(map(len, i)) for i in zip(*L)), 1))

{1: 5, 2: 7, 3: 10}
0 голосов
/ 20 ноября 2018

Просто пройдите тройки из zip() и распечатайте длину самого длинного слова:

lst = [['hello','hi','hey'],['where','when','why'],['him','herself','themselves']]

for i, triple in enumerate(zip(*lst), start=1):
    print('length%d = %d' % (i, len(max(triple, key=len))))

# length1 = 5
# length2 = 7
# length3 = 10

Или как словарь:

{'length%d' % i: len(max(e, key=len)) for i, e in enumerate(zip(*lst), start=1)}
# {'length1': 5, 'length2': 7, 'length3': 10}

Что лучше, чем хранение переменных для каждой длины.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...