Bạn có thể thử này:
In [9]: l = [[3,7,2],[1,4,5],[9,8,7]]
In [10]: [sum(i) for i in zip(*l)]
Out[10]: [13, 19, 14]
này sử dụng một sự kết hợp của zip
và *
giản nén các file trong danh sách và sau đó nén các mục theo chỉ mục của họ. Sau đó, bạn sử dụng danh sách hiểu để lặp qua các nhóm chỉ mục tương tự, tổng hợp chúng và quay lại vị trí 'ban đầu' của chúng.
Để hy vọng làm cho nó rõ ràng hơn một chút, đây là những gì xảy ra khi bạn lặp qua zip(*l)
:
In [13]: for i in zip(*l):
....: print i
....:
....:
(3, 1, 9)
(7, 4, 8)
(2, 5, 7)
Trong trường hợp danh mục có chiều dài bất bình đẳng, bạn có thể sử dụng itertools.izip_longest
với một fillvalue
của 0
- điều này về cơ bản lấp đầy chỉ số mất tích với 0
, cho phép bạn tổng hợp tất cả 'cột':
In [1]: import itertools
In [2]: l = [[3,7,2],[1,4],[9,8,7,10]]
In [3]: [sum(i) for i in itertools.izip_longest(*l, fillvalue=0)]
Out[3]: [13, 19, 9, 10]
Trong trường hợp này, đây là những gì iterating qua izip_longest
sẽ trông như thế:
In [4]: for i in itertools.izip_longest(*l, fillvalue=0):
...: print i
...:
(3, 1, 9)
(7, 4, 8)
(2, 0, 7)
(0, 0, 10)
[Bạn đã thử gì?] (Http://whathaveyoutried.com/) –