无法将字符串列表转换为浮点数

时间:2012-03-21 08:53:40

标签: python list floating-point

我的程序应该读取带有一堆数字的文本文档,并列出只有正数的列表。我无法将文本文档中的字符串转换为浮点数,因此我无法确定它们是否是正面的。

我链接了一个屏幕截图,因为我的副本粘贴有问题。

http://i.stack.imgur.com/L1Z7z.png

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']

3 个答案:

答案 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