将字符串和数字的列表转换为字符串和浮点数

时间:2012-10-19 06:30:42

标签: python

说我有这样的清单:

a = ['hello','1','hi',2,'something','3'] 

我想在保留字符串的同时将列表中的数字转换为float。

我写了这个:

for i in a:
    try:
        i = float(i)
    except ValueError:
        pass

有更有效和更好的方法吗?

5 个答案:

答案 0 :(得分:4)

根据您已经尝试过的内容:

a = ['hello', '1.0', 'hi', 2, 'blah blah', '3']

def float_or_string(item):
    try:
        return float(item)
    except ValueError:
        return item


a = map(float_or_string, mylist)

应该做的伎俩。我会说try:... except:...块有效且b)整齐。正如halex指出的那样,map()不会更改列表,它会返回一个新列表,并将a设置为等于它。

答案 1 :(得分:1)

您正在更改变量i的值 - >数组a的内容不会改变! 如果要更改数组中的值,则应该像这样实现:

for index, value in enumerate(a):
    try :
        a[index] = float(value)
    except ValueError :
        pass

答案 2 :(得分:1)

尝试/排除方式是Pythonic的方式,但如果你真的讨厌它,看看这是否符合你的目的:

a = ['hello','1','hi',2,'something','3']  

pattern = re.compile(r'^(-?\d+)(\.\d+)?') 

b = [float(item) if isinstance(item, str) and re.match(pattern, item) 
else item for item in a] 

答案 3 :(得分:0)

我的简短例子是什么:

a = ['hello','1','hi',2,'something','3']

for i, item in enumerate(a):
    if str(item).isdigit():
        a[i] = float(item)

print a

答案 4 :(得分:0)

我认为这是一个简短而且更好的方式:

a = ['hello','1','hi',2,'something','3']

for index,value in enumerate(a):

     if isinstance(value,int):

             a[index] = float(value)

print a

输出是:['你好','1','hi',2.0,'某事','3']