我有以下列表:
['3036', '7209', '4497', '6702', '8454', '7449', '3665', '7936', '9772', '7114', '956', '2564', '8003', '1704', '3816', '6662', '5858', '7777', '6482', '9634', '8805', '7123', '9703', '4676', '6373', '2834', '7221', '2981', '5415', '6872', '4806', '5460', '8533', '3538', '9663', '8001', '9795', '8752', '1117', '5349', '4509', '1004', '9258', '4183', '4034', '3342', '3482', '8567', '1052', '8135', '5561', '517', '1218', '8877', '8062', '1720', '279', '2054', '801', '918', '8687', '7073', '1865', '7084', '2923', '63', '8824', '1079', '5801', '5047', '5', '2572', '5616', '171', '3062', '9552', '7655', '829', '6096', '2312', '6015', '7100', '9548', '2727', '1792', '8402', '42']
sum()
函数给我Traceback,如何将这些数字加起来?
答案 0 :(得分:4)
您无法对列表求和,因为数字表示为字符串。你能做的是,第一个将列表转换为int,第二个转换为:
>>> int_list = map(int, my_str_list)
其中my_str_list
是您的原始列表。 map
将一个函数(在本例中为int
)作为第二个参数应用于列表的每个元素,并返回转换的列表。在这种情况下,您的列表将转换为整数。
然后,总结一下:
>>> sum(int_list)
答案 1 :(得分:1)
您获得的例外是因为您尝试将sum()
与字符串一起使用。文档说明如下:
sum(sequence[, start]) -> value
返回数字序列(非字符串)的总和加上该值 参数'start'(默认为0)。
鉴于此,如果你想对sum()
使用字符串,那么这样做的pythonic方法是使用list comprehension将字符串转换为整数,如下所示:
>>> l = ['3036', '7209', '4497', '6702', '8454', '7449', '3665', '7936', '9772', '7114', '956', '2564', '8003', '1704', '3816', '6662', '5858', '7777', '6482', '9634', '8805', '7123', '9703', '4676', '6373', '2834', '7221', '2981', '5415', '6872', '4806', '5460', '8533', '3538', '9663', '8001', '9795', '8752', '1117', '5349', '4509', '1004', '9258', '4183', '4034', '3342', '3482', '8567', '1052', '8135', '5561', '517', '1218', '8877', '8062', '1720', '279', '2054', '801', '918', '8687', '7073', '1865', '7084', '2923', '63', '8824', '1079', '5801', '5047', '5', '2572', '5616', '171', '3062', '9552', '7655', '829', '6096', '2312', '6015', '7100', '9548', '2727', '1792', '8402', '42']
>>> sum([int(x) for x in l])
445822
您还可以省略括号(使其成为生成器表达式)以避免重复内存中的列表:
sum(int(x) for x in l)
第三个选项,类似于第一个选项,它复制内存中的列表,是使用map
将字符串列表映射为整数,如下所示:
sum(map(int, l))
答案 2 :(得分:0)
list = ['3036', '7209',...]
sum = 0
for l in list:
sum += int(l)
答案 3 :(得分:-1)
列表中的元素为字符串类型。
要使用sum(list),必须使列表中的所有元素都是数字(表示为double)数据类型(或整数数据类型)。
下面给出了不同的做法。
使用map(int,list)函数,例如:
list = [' 1',' 3']
list = map(int,list)
打印总和(列表)
使用循环,例如:
list = [' 1',' 3']
list = [int(i)for i in list]
打印总和(列表)