2015-01-22 1 views
0

I가이 :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]] 
] 

는 상대적 위치의 모든 단지 합계입니다 가장 깊은 목록 안에. 지금은 중첩 된 for-loops가 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으로 솔루션을 사용해야 훨씬 더 명확하고 읽기.