2016-09-09 7 views
-1

Я пытаюсь использовать float(), чтобы преобразовать следующий список в числа. Но он всегда говорит ValueError: could not convert string to float.Преобразование текстового списка в номера?

Я понимаю, что эта ошибка возникает, когда в тексте есть что-то, что нельзя рассматривать как число. Но мой список выглядит хорошо.

a = ['4', '4', '1', '1', '1', '1', '2', '4', '8', '16', '3', '9', '27', '81', '4', '16', '64', '256', '4', '3'] 

b = [float(x) for x in a] 
+0

Я предполагаю, что 'a' ваш список, этот фрагмент кода работает для меня, так что вы должны опубликовать полный код, который другие могут работать, чтобы воспроизвести вашу ошибку – EdChum

+0

распечатать«а»интерпретатора, он должен уже были определены для строки. – garg10may

+0

Что делает 'set (map (type, a))' say? – garg10may

ответ

0
a = ['4', '4', '1', '1', '1', '1', '2', '4', '8', '16', '3', '9', '27', '81', '4', '16', '64', '256', '4', '3'] 

b = [float(x) for x in a] 

работает отлично.

['4', '4', '1', '1', '1', '1', '2', '4', '8', '16', '3', '9', '27', '81', '4', '16', '64', '256', '4', '3'] 

b = [float(x) for x in a] 

Не так много.

Ваше сообщение об ошибке показывает, что одна из ваших записей - это одиночный кавычек или пустой элемент в вашем списке. Например,

a = ['the', '4', '1', '1', '1', '1', '2', '4', '8', '16', '3', '9', '27', '81', '4', '16', '64', '256', '4', '3'] 

b = [float(x) for x in a] 

бросает ошибку: ValueError: could not convert string to float: the

+0

Извините, мой плохой. Фактически список был взят из txt-файла следующим образом: f = open ('mytext.txt', 'r') a = f.read(). Split() –

+0

Я обнаружил, что если я разделяю() отдельно, это вызовет проблему синтаксического анализа, как я уже упоминал. Но если я просто запустил a = f.read(). Split(), не проблема ... Я запутался. –

+0

Если вам по-прежнему нужна помощь, внесите свой вопрос, пожалуйста. –

-1

вы можете преобразовать список с помощью

, если у вас есть какая-либо строка в списке, то вы получите сообщение об ошибке ValueError: could not convert string to float подобного

>>> a = ['4', '4', '1', '1', '1', '1', '2', '4', '8', '16', '3', '9', '27', '81', '4', '16', '64', '256', '4', '3'] 
>>> b = list(map(float, a)) 
>>> b 

[4.0, 4.0, 1.0, 1.0, 1.0, 1.0, 2.0, 4.0, 8.0, 16.0, 3.0, 9.0, 27.0, 81.0, 4.0, 16.0, 64.0, 256.0, 4.0, 3.0] 
0

Список, который вы опубликовали, полностью соответствует вашему методу.

  • Либо у вас есть a уже определяют в строку и не заостренный к этому списку.

  • В списке содержится номер.

Просто проверить попробовать

map(int,a) #if no errors you have all numbers 

Тогда попробуйте

set(map(type,a)) #if outputs {str} you should be good. 

В любом случае ваша ошибка не является воспроизводимым и разместить более подробную информацию в вашем вопросе.

0

Проблема заключается в том, что именно говорит журнал Traceback: Не удалось преобразовать строку плавать

  1. Если у вас есть строка только с числами, питон достаточно умны, чтобы делать то, что вы пытаетесь и преобразует строку в поплавок.
  2. Если у вас есть строка с нечисловыми символами, преобразование завершится с ошибкой и даст вам ошибку, с которой вы столкнулись.

Вы можете удалить пробелы, а затем проверить цифры в строке.

f = open('mytext.txt','r') 
a = f.read().split() 
a = [each.strip() for each in a] 
a = [each for each in a if each.isdigit() ] 
b = [float(each) for each in a] # or b = map(float, a) 
print b 
# just to make it clear written as separate steps, you can combine the steps 
Смежные вопросы