2016-11-29 101 views
0

我想写一个函数,它将删除非浮点数并将所有int转换为浮点数。我在自己的调试过程中包含了一些打印语句。我希望向int添加“.0”以返回一个列表。将混合列表转换为浮点数在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

通过ettananyPatrick 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))