添加字符串列表中的数字

时间:2013-07-21 06:37:31

标签: python string list average

我在我的脚本中打开一个列表并搜索与'2011'匹配的内容并使用以下代码打印'2011'字符串

for row in dL:
    if "2011" in row:
        print row

并获得以下输出

['2011', 'randome', '6200']
['2011', 'marks', '6020']
['2011', 'man', '6430']
['2011', 'is', '6040']
['2011', 'good', '6230']

我要做的是获取第3列中的所有值并求它们得到结果30920,然后计算并打印平均值6184.到目前为止,我有以下代码。

   total = int(row[2])
   total2 = sum(total)
   print total2

然而我收到以下错误

total2 = sum(total)
TypeError: 'int' object is not iterable

如何修复此错误并创建总计和平均值?

3 个答案:

答案 0 :(得分:2)

您想要找到所有列表的总和,而不是从一个列表中找到(如您所尝试的那样)。

使用list comprehension代替for-loop:

total2 = sum(int(i[2]) for i in dL if '2011' in i)

获得平均值:

average = total2 / float(len([int(i[2]) for i in dL if '2011' in i])) # In python 3, the float() is not needed

列表理解是制作列表的快捷方式。以此为例:

result = []
for i in range(1, 4):
    result.append(i**2)

结果将包含:

[1, 4, 9]

但是,这可以缩短为列表理解:

[i**2 for i in range(1,4)]

返回同样的东西。

我打电话给sum()并且我没有在理解范围内放置括号的原因是因为我不需要。 Python将其解释为生成器表达式。您可以阅读更多相关信息here

答案 1 :(得分:0)

total应为list

total = [int(row[2]) for row in dL if '2011' in row]    # totals in a list
total2=sum(total)                                       # total of totals. :P
print total2                                            # print total
average = total2/len(total)                             # get average
print average                                           # print average

答案 2 :(得分:0)

因为你想要得到平均值,所以你也必须考虑过滤列表的长度。 您可以相应地修改上述任何代码,我将使用@ haidro的答案。

l = [int(i[2]) for i in dL if '2011' in i]   #to get filtered list
total2 = sum(l)      #total of list elemnents
avg = total2/len(l)   #average of list elements