将多个列表中的第一个值相加
Posted
技术标签:
【中文标题】将多个列表中的第一个值相加【英文标题】:Adding first value together from multiple lists 【发布时间】:2022-01-15 06:44:02 【问题描述】:我正在尝试将第一个值添加到一系列列表中,然后将第二个值添加到一系列列表中,依此类推。
例如:
a=[10,20,30,40,50]
b=[60,70,80,90,100]
c=[110,120,130,140,150]
所以我想要的结果是:
[180, 210,240, 270, 300]
我目前的代码是:
total = 0
for I in range (0,a)
total = total +a[I]+b[I]+c[I]
return total
【问题讨论】:
这里显示的代码有什么问题? 这能回答你的问题吗? How to iterate through two lists in parallel? 【参考方案1】:需要在您的代码中更正缩进。此外,收集列表中特定索引的元素的总和。如果您只是添加元素,它将添加所有元素,只给您所有事物的总和。此外,在 for 循环语句中,它应该是 len(a) 而不仅仅是 a。您更正的代码:
a=[10,20,30,40,50]
b=[60,70,80,90,100]
c=[110,120,130,140,150]
sums=[]
for i in range(0,len(a)):
sums.append(a[i]+b[i]+c[i])
print(sums)
【讨论】:
【参考方案2】:total = 0
for I in range (0,a):
total = total +a[I]+b[I]+c[I]
return total
因此,您的代码存在一些问题。
您不能使用range(0,a)
。 a
是列表而不是整数。您必须使用列表的长度,或len(a)
。
根据PEP8 standards,您也不应该使用大写字母作为变量,除非它们是常量变量。
您正在尝试返回不在函数内部的数据。那是行不通的。 你可以这样做:
def add_vals_from_lists(a,b,c):
total = 0
for i in range(len(a)):
total += sum([a[i], b[i], c[i]])
# The above is a much cleaner way to write total = total +a[I]+b[I]+c[I]
return total
a=[10,20,30,40,50]
b=[60,70,80,90,100]
c=[110,120,130,140,150]
add_vals_from_lists(a,b,c)
或者,您可以只使用print(total)
而不是使用return total
。
但是,这只会将所有内容添加到总返回 1200 中,而不是您想要的。
正如 Samwise 和 Pedro 所指出的,您可以简单地将其写在 list-comprehension 中。
[sum(t) for t in zip(a, b, c)]
zip() - 并行迭代多个可迭代对象,生成元组,每个元组都有一个项目。对于这些元组中的每一个,第一个是 (10,60,110),列表理解将 sum() 每个。生成[180, 210, 240, 270, 300]
列表。
【讨论】:
【参考方案3】:将sum
和zip
函数与简单的列表理解一起使用:
total = [sum(i) for i in zip(a,b,c)]
或者遍历索引:
total = []
for i in range(len(a)):
total.append(a[i] + b[i] + c[i])
total
必须是 list
,并且您必须在每次迭代中使用 append
。
【讨论】:
【参考方案4】:使用zip
获取每个列表的第一个元素,然后sum
他们:
>>> a=[10,20,30,40,50]
>>> b=[60,70,80,90,100]
>>> c=[110,120,130,140,150]
>>> [sum(t) for t in zip(a, b, c)]
[180, 210, 240, 270, 300]
【讨论】:
以上是关于将多个列表中的第一个值相加的主要内容,如果未能解决你的问题,请参考以下文章