我想读取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
答案 0 :(得分: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 :(得分:1)
看起来p
是一个列表列表。 p
的每个元素都是line
,由列表推导[float(i) for i in line]
构成。这就是为什么你不能在它上面执行float
的原因
答案 2 :(得分: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]
如果您确实需要总计,还可以将循环中的.append
行更改为:
p += line
答案 3 :(得分: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