2016-04-14 35 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 
相關問題