Поэлементная сумма вложенных списков - PullRequest
1 голос
/ 09 июля 2020

У меня есть вложенный список с именем list_6:

[[- 1, 1, -1, 1, -1, 1, 1, 0, -1, 0, -1, -1, 1 , 1, 1, 0, 1, -1, -1, -1, 1, 1, 1, 0, 0, -1, 0, 0, 0, 1, 0, -1, 1, 1, -1 , 0, 0, 1, 1, -1, 0, -1, 1, 1, -1, 1, -1, -1, -1, 1, -1], ...]]

каждый элемент списка содержит целые числа от -1,1, а элементы имеют неравную длину, в списке 20 элементов

Я хотел бы создать новый список с именем list_7, который выглядит так:

[[13], [4], [5], ...]], так что каждый элемент во вложенном списке суммируется, и результат печатается. Я пробовал использовать iter.zip_longest:

[sum (i) for i in itertools.zip_longest (* list_6, fillvalue = 0)]

, но получаю сообщение об ошибке:

объект 'str' не вызывается

1 Ответ

6 голосов
/ 09 июля 2020

Вы можете сделать это, используя понимание списка https://www.programiz.com/python-programming/list-comprehension

list_7 = [sum(inner_list) for inner_list in list_6]

В скобках ([]) вы перебираете каждый элемент в list_6 . Поскольку каждый элемент в list_6 сам по себе является списком (inner_list), мы можем вызвать функцию python sum в списке, чтобы получить сумму значений в пределах inner_list https://www.w3schools.com/python/ref_func_sum.asp.

Теперь я вижу, что вы искали суммы, которые должны быть сами списками ([[13],[4],[5],...]],), и в этом случае вы хотели бы сделать:

list_7 = [[sum(inner_list)] for inner_list in list_6]

Положив квадратные скобки вокруг sum(inner_list) создают новый список, единственной записью которого является сумма inner_list.

...