我在我的脚本中打开一个列表并搜索与'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
如何修复此错误并创建总计和平均值?
答案 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