我的列表仅包含[1,2,3]
和[4,5,6]
之类的整数。有时我什至有[7,8,9]
个或更多列表。如何将每个元素加在一起以形成相同长度的新列表?
[1,2,3] + [4,5,6] + [7,8,9] = [12,15,18]
我知道上面只是添加了元素并创建了一个较长的列表(包含9个元素),但是我想逐个添加列表。
答案 0 :(得分:5)
您可以将列表放在列表中,zip
子列表用*
运算符解压缩后,然后将map
sum
放到列表中:< / p>
l = [[1,2,3], [4,5,6], [7,8,9]]
print(list(map(sum, zip(*l))))
这将输出:
[12, 15, 18]
编辑:上面是针对Python 3.x的。如果使用的是较早版本,则可以使用itertools.izip
代替zip
,并且不需要调用list
构造函数:
import itertools
l = [[1,2,3], [4,5,6], [7,8,9]]
print map(sum, itertools.izip(*l))
答案 1 :(得分:0)
Numpy非常适合完成此任务,尽管对于您的情况来说可能有些过分。
假设您有
x = [1,2,3] y = [4,5,6] z = [7,8,9]
您可以将它们转换为数组并求和:
np.array([x, y, z]).sum(axis=0)
您可以对常规列表和zip
使用类似的方法:
[sum(col) for col in zip(x, y, z)]
答案 2 :(得分:0)
您可以这样做:
#Create the list
x = [1,2,3,12,13]
y = [4,5,7,11]
z = [7,8,9,14,15,16]
#create a list with the list length
lenList = [len(x),len(y),len(z)]
finalList = []
#get the minimum and maximum list length
minLen = min(lenList)
maxLen = max(lenList)
#if the three list have the same length then you can simply sum the element
if(maxLen == minLen):
for j in range(maxLen):
finalList.append(x[j]+y[j]+z[j])
else:
#if the list have different length look for the minimum value
while(lenList[0] != lenList[1] or lenList[0] != lenList[2]):
minLen = min(lenList)
maxLen = max(lenList)
#if the min len is the x list then add some zero
if(lenList.index(minLen) == 0):
#change the len to the max len
lenList[0] = maxLen
for a in range(minLen,maxLen):
x.append(0)
#if the min len is the y list then add some zero
elif(lenList.index(minLen) == 1):
lenList[1] = maxLen
for b in range(minLen,maxLen):
y.append(0)
#if the min len is the z list then add some zero
elif(lenList.index(minLen) == 2):
lenList[2] = maxLen
for c in range(minLen,maxLen):
z.append(0)
#sum all the element
for j in range(0,maxLen):
finalList.append(x[j]+y[j]+z[j])
print finalList
输出:
[12, 15, 19, 37, 28, 16]
评论:
该程序可以对所有列表元素求和,并将结果插入另一个列表中。您可以对3个具有无限元素且列表长度不相同的列表求和。如果您需要汇总更多列表,只需编辑此部分:
while(lenList[0] != lenList[1] or lenList[0] != lenList[2]):
minLen = min(lenList)
maxLen = max(lenList)
#if the min len is the x list then add some zero
if(lenList.index(minLen) == 0):
#change the len to the max len
lenList[0] = maxLen
for a in range(minLen,maxLen):
x.append(0)
#if the min len is the y list then add some zero
elif(lenList.index(minLen) == 1):
lenList[1] = maxLen
for b in range(minLen,maxLen):
y.append(0)
#if the min len is the z list then add some zero
elif(lenList.index(minLen) == 2):
lenList[2] = maxLen
for c in range(minLen,maxLen):
z.append(0)
您可以在此处添加:
elif(lenList.index(minLen) == 3):
lenList[3] = maxLen
for c in range(minLen,maxLen):
listN.append(0)
之后,您必须添加列表:
#Create the list
x = [1,2,3,12,13]
y = [4,5,7,11]
z = [7,8,9,14,15,16]
listN = [0,0,0]
#create a list with the list length
lenList = [len(x),len(y),len(z),len(listN)]
在求和迭代中,您必须更改:
#sum all the element
for j in range(0,maxLen):
finalList.append(x[j]+y[j]+z[j],listN[j])
答案 3 :(得分:0)
如果您知道子列表的长度为3,则为另一种方法
/*
输出
a = [1,2,3] + [4,5,6] + [7,8,9]
[sum([a[3*q+i] for q in range(len(a)//3)]) for i in range(len(a)//3)]
或者
[12,15,18]
您可以将3换成您使用的长度,但是由于您在代码中显示了它们已经放置在此处,所以我将无法自动读取它。什么是替代解决方案,然后字典使用散列,所以如果您的列表很大,就不会有问题。