我有3个名单,比如说:
a = [1,2,3,4,5]
b = [0,2,4,6,8]
c = [2,3,4,5,6]
我想创建一个新列表,将各个元素添加到一起,即
d = [3,7,11,15,19]
我的代码:
d = []
for i,j,k in a,b,c:
d.append(i+j+k)
然而,我一直收到错误:
ValueError:要解压缩的值太多
我该如何解决这个问题?
答案 0 :(得分:8)
尝试这样:
>>> map(sum, zip(a,b,c))
[3, 7, 11, 15, 19]
对于python 3x,你需要调用list:
>>> list(map(sum, zip(a,b,c)))
[3, 7, 11, 15, 19]
答案 1 :(得分:1)
虽然Hackaholic的解决方案非常出色(而且非常功能性编程),但这里有一个使用列表推导的替代方案。
关键因素是zip(a,b,c)
,returns a sequence of tuples containing the ith elements of a, b, c。正如Joran Beasley所提到的,只需添加zip
:
d = []
for i,j,k in zip(a,b,c):
d.append(i+j+k)
从这里开始,很容易找到列表理解版本:
d = [i+j+k for i,j,k in zip(a,b,c)]
事实上,您甚至不需要将元组解压缩为i, j, k
,而是可以直接对元组求和:
d = [sum(tup) for tup in zip(a,b,c)]