2013-07-21 45 views
1

我打开一个列表到我的脚本和“2011”的搜索匹配和使用下面的代码从字符串列表

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

打印“2011”的字符串,并得到下面的输出添加数字

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

我想要做的是从第三列中获取所有值并将它们相加得到结果30920,然后计算并打印出6184的平均值。到目前为止,我的代码如下。

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

但我得到以下错误

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

我怎样才能解决这个错误,并创建和总平均值?

+0

注意:当你说“行[2]”你的意思是*“第三列” * ;-)不*“第三行” * – smci

+0

此外,如果你做任何不平凡的数据mungeing ,学习熊猫包,它使这样的东西容易。 – smci

回答

2

你想找到所有列表的总和,而不是从一个具体(如你已经尝试)。

使用list 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将其解释为生成器表达式。你可以阅读更多关于它here

+0

嗨Hadiro ive用您的部分替换了我的代码的总节,但我得到以下错误。 total2 = sum(i [2] for i in dL if if'2011'in i) TypeError:不支持的操作数类型为+:'int'和'str',你会知道为什么吗? – user2603519

+0

@ user2603519我刚刚解决了这个问题,因为你评论:) – TerryA

+0

谢谢你的作品非常漂亮。如果即时通讯尝试计算平均值,我将如何通过使用列表的列表?但它不是一个真正的清单? – user2603519

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 
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 
+2

**是**'2011'在我吗? –

+0

@AshwiniChaudhary谢谢你纠正我......如果,不是...... :) –

相关问题