我有两个列表。例如
list1 = ["7","3","19","5"]
list2 = ["3","15,"13","16"]
我想将这些数字加在一起,这样我就会得到另外四个数字。例如,7+3
和3+15
的结果。
我的总体输出应该是
["10","18","32","21"]
我尝试使用 for 循环来执行此操作,但是我没有得到7+3 = 10
我得到7+3 = 73
.我也尝试使用int()
方法,但出现错误。
在列表推导中使用zip
、int
和str
。
[str(int(x) + int(y)) for x, y in zip(list1, list2)]
结果:
['10', '18', '32', '21']
首先,你有字符串列表(不是整数)。 "7"
是一个字符串。如果将其添加到 "3"
,您将获得"73"
。 7
是一个整数。
第一件事是将列表转换为整数。这是一种方法,也是我会使用的方法。
list1 = map(int, list1)
这是要求python对参数中list1
的每个元素调用int
函数,并将返回值赋回list1
。同样适用于list2
.完成后,您可以添加两个整数列表。
这可以通过多种方式完成。我会这样做。
res = []
for l1, l2 in zip(list1, list2):
res.append(l1 + l2)
zip
函数会将多个列表的元素"压缩"到组中。因此,您的列表将被压缩为元组,例如(7,3)
,(3, 15)
等。带有双精度变量的循环每次都会解压缩这些元组,以便您在第一次迭代中获得l1 =7
和l2 =3
,依此类推。
将它们相加并放回结果列表中。
有更简洁的方法可以做到这一点,但这很清楚。如果您有兴趣,这里有另一个。
[int(x1) + int(x2) for x1,x2 in zip(l1, l2)]
您的问题是您正在连接字符串。
使用 map
函数,您将从原始字符串列表["7","3","19","5"]
中获得所需的 int 列表[7,3,19,5]
。
然后,您可以使用zip
对两个数组求和。
list1 = ["7","3","19","5"]
list2 = ["3","15","13","16"]
print [x+y for x,y in zip(map(int, list1), map(int, list2))]
list1 = ["7","3","19","5"]
list2 = ["3","15","13","16"]
print [str(x+y) for x,y in zip(map(int,list1),map(int,list2))]
我认为这符合您的要求。首先,我将列表转换为整数列表。我把它们拉在一起,把每对都加起来
[str(sum(c)) for c in zip(map(int, list1),map(int, list2))]
使用 sum 比使用 c[0]+c[1] 更好
迭代解决方案 (Python 2.x):
from operator import add
from itertools import starmap, imap, izip, tee, chain
def pairwise(seq):
a, b = tee(seq)
next(b, None)
return izip(a, b)
list1 = ["7", "3", "19", "5"]
list2 = ["3", "15", "13", "16"]
print list(starmap(add, pairwise(imap(int, chain(list1, list2)))))
输出:
$ python foo.py
[10, 22, 24, 8, 18, 28, 29]
添加任意数量的列表的函数。
list1 = ["7","3","19","5"]
list2 = ["3","15","13","16"]
def stradd(*args):
return [str(sum(map(int, x))) for x in zip(*args)]
print stradd(list1, list2)
["10"、"18"、"32"、"21"]