2016-04-14 26 views
2

我想读txt文件,总结所有的列表元素类型错误:浮置()的参数必须是字符串或列表和一些

with open('beautm.txt') as f: 
    p = [] 
    for line in f: 
     line = line.split()   
     line = [float(i) for i in line] 
     p.append(line) 

print p 
print type(p)  
print sum(map(float,p)) 

这应该是简单,但

[[729000.0, 243000.0, 81000.0, 27000.0, 9000.0, 3000.0, 500.0, 500.0], [500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0], [500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0], [500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0], [500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0], [500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0], [500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0], [500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0], [500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0], [500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0], [500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0], [500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0], [500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0], [500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0], [500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0], [500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0], [500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0], [500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0], [500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0], [500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0], [500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0], [3000.0, 9000.0, 27000.0, 81000.0, 243000.0, 729000.0]] 
<type 'list'> 
Traceback (most recent call last): 
    File "mk4.py", line 10, in <module> 
    print sum(map(float,p)) 
TypeError: float() argument must be a string or a number 
+3

你的p是列表的列表,你应该使用.extend而不是附加在你的循环中 – Alex

回答

2

主要问题在这里,追加列表到一个列表:

>>> p = [] 
>>> p.append(l) 
>>> p 
[[1, 2, 3]] 
>>> p.append(l) 
>>> p 
[[1, 2, 3], [1, 2, 3]] 

所以,作为一个修复你的代码,使用list.extend代替:

>>> p = [] 
>>> l = [1,2,3] 
>>> p.extend(l) 
>>> p 
[1, 2, 3] 
>>> p.extend(l) 
>>> p 
[1, 2, 3, 1, 2, 3] 
1

看起来像p是列表的列表。 p的每个元素作为line,它由列表理解[float(i) for i in line]构成。所以这就是为什么你不能在它上面执行float的原因

1

正如前面提到的,你试图将float应用到列表中。不过,我不确定是否需要每个子列表的总数或总和。无论哪种方式:

如果你想在所有列表总结一切你能总结前把它们连:

from itertools import chain 
print sum(map(float, chain(*p))) 

如果你想每单个人的款项,你可以这样说:

print [sum(map(float, sublist)) for sublist in p] 

对于你的p输出如下:

# Total sum 
2265000.0 
# Sums per each list 
[1093000.0, 4000.0, 4000.0, 4000.0, 4000.0, 4000.0, 4000.0, 4000.0, 4000.0, 4000.0, 4000.0, 4000.0, 4000.0, 4000.0, 4000.0, 4000.0, 4000.0, 4000.0, 4000.0, 4000.0, 4000.0, 1092000.0] 

如果你确实想要th E共,你也可以在你的循环改变.append行这样的: p += line

1

或者你可以做你的循环的总和,而不是建立一个不必要的名单:

with open('beautm.txt') as f: 
    p = 0 
    for line in f: 
     line = line.split()   
     p += sum([float(i) for i in line]) 

print p 
相关问题