1

我在脚本中打开一个列表并搜索与“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

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

4

3 回答 3

2

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

使用 alist comprehension而不是 for 循环:

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 将其解释为生成器表达式你可以在这里阅读更多关于它的信息

于 2013-07-21T06:39:21.100 回答
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
于 2013-07-21T06:50:34.560 回答
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
于 2013-07-21T06:44:05.237 回答