Суммирующие списки Python внутри списков - PullRequest
0 голосов
/ 24 сентября 2018

Итак, у меня есть список, который выглядит примерно так

[[[1, 2], [3, 4], [5, 6]],
 [[7, 8], [9, 10], [11, 12]],
 [[13, 14], [15, 16], [17, 18]],
 [[19, 20], [21, 22], [23, 24]]]

И я хочу, чтобы он выглядел следующим образом

[[3, 7, 11],
 [15, 19, 23],
 [27, 31, 35],
 [39, 43, 27]]

, то есть 3 = sum([1, 2]), 7 = sum([3, 4]), ....

Я пробовал вложить в циклы, но я не нашел ничего, что дало бы желаемый результат, кто-нибудь знает, как я мог это сделать?

Ответы [ 3 ]

0 голосов
/ 24 сентября 2018

Если вы счастливы использовать стороннюю библиотеку, вы можете использовать NumPy и суммировать по одному измерению:

import numpy as np

A = np.array([[[1, 2], [3, 4], [5, 6]],
              [[7, 8], [9, 10], [11, 12]],
              [[13, 14], [15, 16], [17, 18]],
              [[19, 20], [21, 22], [23, 24]]])

res = A.sum(2)

Результат:

array([[ 3,  7, 11],
       [15, 19, 23],
       [27, 31, 35],
       [39, 43, 47]])

См. Также: Каковы преимущества NumPy перед обычными списками Python?

0 голосов
/ 24 сентября 2018

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

[[sum(x) for x in triple] for triple in lists]

В приведенном выше понимании списка тройной будет ваш список из трех двойников, поэтому первый цикл for будет охватывать их.Затем x будет каждым списком двойников внутри тройки, поэтому мы суммируем его, сохраняя его внутри исходной тройки, используя следующую скобку:

[sum(x) for x in triple]

output:

[[3, 7, 11], [15, 19, 23], [27, 31, 35], [39, 43, 47]]
0 голосов
/ 24 сентября 2018

Это будет хорошо работать, и imo более читабелен, чем списки.

lists = [[[1, 2], [3, 4], [5, 6]],
        [[7, 8], [9, 10], [11, 12]],
        [[13, 14], [15, 16], [17, 18]],
        [[19, 20], [21, 22], [23, 24]]]

new_lists = []
for nested in lists:
    new_ls = []
    for ls in nested:
        new_ls.append(sum(ls))
    new_lists.append(new_ls)


>>> new_lists
[[3, 7, 11], [15, 19, 23], [27, 31, 35], [39, 43, 47]]
...