2016-11-29 3 views
0

Я пытаюсь написать функцию, которая удалит не-float и преобразует все int в плавающие числа. Я включил некоторые заявления печати из моего собственного процесса отладки. Мне нужно преобразование, которое добавляет «.0» к int, чтобы вернуть список.конвертировать смешанный список в float в python

std_in= ['1', '2', '2.1', 'ab1', '1ab'] 

Результаты [ '1', '2', '2,1']

Желаемые результаты [ '1', '2', '2,1'] [ '1', '2', '2,1']

def float_sort(std_in): 
    float_sort = std_in 
    sorted_float = "" 
    float_sort = " ".join(float_sort) 
    float_sort=re.findall(r"\b(^[+-]d+\e+\d+|\-\d+\.\d+|\-d+|\d+\.\d+|\d+)\b", float_sort) 
    print(float_sort) 
    [float(i) for i in float_sort] 
    sorted_float = sorted(float_sort, key=len) 
    print(type(sorted_float)) 
    sorted_float = " ".join(sorted_float) 
    print(sorted_float) 
    sorted_float = sorted_float.split() 
+1

Вопрос не совсем ясен. Можете ли вы исправить ваш входной сигнал выборки? –

+0

Вы хотите, чтобы список результатов был списком 'int' или списка строк? –

ответ

2

Оба ответа, представленные ettanany и Patrick Haugh хороши, но просто для удовольствия, вот мой ответ:

l = ['1', '2', '2.1', 'ab1', '1ab'] 

def float_generator(mylist): 
    for n in mylist: 
     try: 
      yield float(n) 
     except ValueError: 
      pass 

print list(float_generator(l)) 
4

Попробуйте следующий код:

res = [] 
std_in = ['1', '2', '2.1', 'ab1', '1ab'] 

for i in std_in: 
    try: 
     res.append(float(i)) 
    except ValueError: 
     pass 

Выход:

>>> res 
[1.0, 2.0, 2.1] 
1

Если вы хотите вывод в виде строк:

def float_check(s): 
    try: 
     float(s) 
     return True 
    except ValueError: 
     return False 

l = ['1', '2', '2.1', 'ab1', '1ab'] 
print([i for i in l if float_check(i)]) 
2

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

def parsefloat(str): 
    try: 
     return float(str) 
    except ValueError: 
     return False 

Затем примените parsefloart к каждому элементу списка.

res = filter(lambda x: x, map(parsefloat, std_in))