使用zip函数组合列表的长列表

时间:2013-10-15 10:24:40

标签: python list loops python-2.7 zip

假设我有一个列表

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

由于

2 个答案:

答案 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)

另一种看起来更明显的方法是在解压缩列表中使用内置mapsum一起zip

>>> map(sum, zip(*mylist))
[51, 57, 63]

如果您是发电机的粉丝,以下可能会增加一些好处

>>> from itertools import izip, imap
>>> list(imap(sum, izip(*mylist)))
[51, 57, 63]