#python #list
#питон #Список
Вопрос:
Есть ли более масштабируемый способ подсчета длины каждого элемента в этом списке списков и по-прежнему отображения результата в виде списка списков? мое текущее решение кажется чрезмерно длинным и не масштабируемым (мне всегда придется вводить индекс каждого списка).
mylist = [['C ', 'Java', 'Python', 'Swift'], ['Software','Web','Mobile'], ['Microsoft', 'Oracle', 'OpenSource', 'Apple', 'SAP']]
l1 = []
l2 = []
l3 = []
l = [l1, l2, l3]
for n in mylist[0]:
c = len(n)
l1.append(c)
for n in mylist[1]:
c = len(n)
l2.append(c)
for n in mylist[2]:
c = len(n)
l3.append(c)
print(l)
Правильный вывод — это:
[[3, 4, 6, 5], [8, 3, 6], [9, 6, 10, 5, 3]]
Я попытался использовать один цикл for, но он показывает результаты в одном списке, а не в списке списков.
l = []
for i in mylist:
for n in i:
c = len(n)
l.append(c)
print(l)
Также попробовал цикл while, но программа завершилась как бесконечный цикл.
mylist = [['C ', 'Java', 'Python', 'Swift'], ['Software','Web','Mobile'], ['Microsoft', 'Oracle', 'OpenSource', 'Apple', 'SAP']]
l = []
i = 0
n = 0
while i < len(mylist):
while n < len(mylist[i]):
c = len(mylist[i][n])
l.append(c)
fl = [l]
l = []
i = 1
print(fl)
Комментарии:
1.
print([[len(s) for s in l] for l in mylist])
Ответ №1:
Вы можете использовать понимание списка
res = [[len(y) for y in x] for x in mylist]
print(res)
Выходной сигнал:
[[3, 4, 6, 5], [8, 3, 6], [9, 6, 10, 5, 3]]
Ответ №2:
Простой ответ — это простое понимание вложенного списка:
output = [[len(element) for element in sublist] for sublist in mylist]
Вы можете использовать один цикл, если вы делегируете некоторую работу map
:
output = [list(map(len, sublist)) for sublist in mylist]
Если вы хотите повеселиться, вы можете использовать map
дважды:
output = list(map(lambda sublist: list(map(len, sublist)), mylist))
Комментарии:
1. Для меня
list(map(lambda
это противоположность веселью 😛2. Спасибо! Понимания вложенного списка было достаточно!