Невозможно преобразовать список строк в число с плавающей точкой - PullRequest
3 голосов
/ 21 марта 2012

Моя программа должна читать текстовый документ с кучей цифр и составлять список только положительных чисел.Я не могу преобразовать строки из текстового документа в число с плавающей точкой, поэтому не могу определить, являются ли они положительными.

Я связал снимок экрана, потому что моя копия вставлена ​​с ошибками.

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 ]

5 голосов
/ 21 марта 2012

Вы можете легко перевести этот список в числа с плавающей точкой:

>>> 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])
2 голосов
/ 21 марта 2012

После прочтения содержимого файла вам необходимо разделить содержимое по пробелам и разобрать каждое число отдельно.Сейчас он пытается проанализировать строку «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
2 голосов
/ 21 марта 2012

Прежде всего, не вызывайте переменные 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
...