Python列表以及如何总结它

时间:2015-11-08 08:54:07

标签: python python-2.7

我有以下列表:

['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,如何将这些数字加起来?

4 个答案:

答案 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)数据类型(或整数数据类型)。

下面给出了不同的做法。

  1. 使用map(int,list)函数,例如:

    list = [' 1',' 3']

    list = map(int,list)

    打印总和(列表)

  2. 使用循环,例如:

    list = [' 1',' 3']

    list = [int(i)for i in list]

    打印总和(列表)