我的程序应该读取带有一堆数字的文本文档,并列出只有正数的列表。我无法将文本文档中的字符串转换为浮点数,因此我无法确定它们是否是正面的。
我链接了一个屏幕截图,因为我的副本粘贴有问题。
http://i.stack.imgur.com/L1Z7z.png
如果没有数字= float(number)
,我会得到['3.7', '-22', '3500', '38', '-11.993', '2200', '-1', '3400', '3400', '-3400', '-22', '12', '11', '10', '9.0']
答案 0 :(得分:5)
您可以轻松地将该列表转换为浮点数:
>>> nums = ['3.7', '-22', '3500', '38', '-11.993', '2200', '-1', '3400', '3400', '-3400', '-22', '12', '11', '10', '9.0']
>>> map(float, nums)
[3.7, -22.0, 3500.0, 38.0, -11.993, 2200.0, -1.0, 3400.0, 3400.0, -3400.0, -22.0, 12.0, 11.0, 10.0, 9.0]
但问题似乎是文件中的行不包含单独的浮点数。当您致电float(number)
时,number
是该文件中的一行,其中(来自错误)似乎包含三个以空格分隔的数字“3.7 -22 3500”。
您需要在拆分后调用float
函数:
for line in f:
for numberString in line.split()
number = float(numberString)
if(number > 0)
numbers.append(number)
或者,功能更多:
for line in f:
numbers.extend([n for n in map(float, line.split()) if n > 0])
答案 1 :(得分:2)
首先,不要调用变量list
,您将隐藏内置list
。
这是一项改进:
li = []
for line in open("numbers.txt"):
nums = line.split() # split the line into a list of strings by whitespace
nums = map(float, nums) # turn each string into a float
nums = filter(lambda x: x >= 0, nums) # filter the negative floats
li.extend(nums) # add the numbers to li
答案 2 :(得分:2)
读取文件内容后,需要按空格分割内容并分别解析每个数字。它现在试图将字符串'3.7 -22 3500'解析为单个浮点数,这是不可能的。
>>> float('3.7 -22 3500')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for float(): 3.7 -22 3500