2015-01-22 5 views
0

у меня есть это:с помощью python.itertools просуммировать слотов по нескольким спискам

[ 
    [ [1,1,1,0,0,0,0], [0,1,2,3,4,5,6], [1,2,3,4,5,6,7], [2,3,4,5,6,7,8], [3,4,5,6,7,8,9], [4,5,6,7,8,9,0] ] 

    , [ [2,2,2,0,0,0,0], [0,1,2,3,4,5,6], [1,2,3,4,5,6,7], [2,3,4,5,6,7,8], [3,4,5,6,7,8,9], [4,5,6,7,8,9,2] ] 

    , [ [3,3,3,0,0,0,0], [0,1,2,3,4,5,6], [1,2,3,4,5,6,7], [2,3,4,5,6,7,8], [3,4,5,6,7,8,9], [4,5,6,7,8,9,0] ] 
] 

, и я стараюсь, чтобы получить это:

[ 
[[6, 6, 6, 0, 0, 0, 0], [0, 3, 6, 9, 12, 15, 18], [3, 6, 9, 12, 15, 18, 21], [6, 9, 12, 15, 18, 21, 24], [9, 12, 15, 18, 21, 24, 27], [12, 15, 18, 21, 24, 27, 2]] 
] 

это просто сумма всех относительных позиций внутри самых глубоких списков. Прямо сейчас, у меня есть 3 вложенные в-петли, и я надеюсь один из вас itertools специалисты могут показать мне быстрее & более изящный способ сделать это

ответ

1

Вам не нужно itertools для этого, вы можете сделать это, используя список понимание и zip(*):

>>> lst = [[[1, 1, 1, 0, 0, 0, 0], [0, 1, 2, 3, 4, 5, 6], [1, 2, 3, 4, 5, 6, 7], [2, 3, 4, 5, 6, 7, 8], [3, 4, 5, 6, 7, 8, 9], [4, 5, 6, 7, 8, 9, 0]], [[2, 2, 2, 0, 0, 0, 0], [0, 1, 2, 3, 4, 5, 6], [1, 2, 3, 4, 5, 6, 7], [2, 3, 4, 5, 6, 7, 8], [3, 4, 5, 6, 7, 8, 9], [4, 5, 6, 7, 8, 9, 2]], [[3, 3, 3, 0, 0, 0, 0], [0, 1, 2, 3, 4, 5, 6], [1, 2, 3, 4, 5, 6, 7], [2, 3, 4, 5, 6, 7, 8], [3, 4, 5, 6, 7, 8, 9], [4, 5, 6, 7, 8, 9, 0]]] 
>>> [[sum(y) for y in zip(*x)] for x in zip(*lst)] 
[[6, 6, 6, 0, 0, 0, 0], [0, 3, 6, 9, 12, 15, 18], [3, 6, 9, 12, 15, 18, 21], [6, 9, 12, 15, 18, 21, 24], [9, 12, 15, 18, 21, 24, 27], [12, 15, 18, 21, 24, 27, 2]] 

Обратите внимание, что ваш текущий ожидаемый выход список, который содержит список списков, который является ненужным, лучше держать его в список списков.

0

Другое решение без списковых:

# In Python 2.x 
>>> map(lambda l: map(sum, zip(*l)), zip(*lst)) 
# In Python 3.x 
>>> list(map(lambda l: list(map(sum, zip(*l))), zip(*lst))) 

Обратите внимание, что это решение является лишь доказательством концепции, вы должны использовать решение по @AshwiniChaudhary, как это гораздо более четким и читаемым.

Смежные вопросы