假设我有一个列表
mylist = [[1,2,3],[4,5,6],[7,8,9],[10,11,12],[13,14,15],[16,17,18]]
如果我想逐个元素添加,那么我可以使用逻辑:
[x+y for x,y in zip(mylist[0],mylist[1],mylist[2],mylist[3],mylist[4],mylist[6]]
它将给出列元素的总和。 但问题是,如果mylist恰好是1000个列表的列表,那么在zip函数中写入mylist的每个索引有点尴尬和模糊,我需要通过元素操作来执行元素。
我尝试将循环放在zip函数中,但它不起作用。那么任何想法?
它应该像
一样工作zip(for k in mylist) # or something else
由于
答案 0 :(得分:3)
要汇总所有第一个元素,所有第二个元素等等:
In [2]: [sum(k) for k in zip(*mylist)]
Out[2]: [51, 57, 63]
请注意,输出中的每个数字都是len(mylist)
个数字的总和:
In [3]: zip(*mylist)
Out[3]: [(1, 4, 7, 10, 13, 16), (2, 5, 8, 11, 14, 17), (3, 6, 9, 12, 15, 18)]
The *
operator解包mylist
,以便其项目成为zip
的单独参数。
答案 1 :(得分:2)
另一种看起来更明显的方法是在解压缩列表中使用内置map
和sum
一起zip
>>> map(sum, zip(*mylist))
[51, 57, 63]
如果您是发电机的粉丝,以下可能会增加一些好处
>>> from itertools import izip, imap
>>> list(imap(sum, izip(*mylist)))
[51, 57, 63]