仅转换混合类型列表中的float

时间:2014-11-19 02:51:21

标签: python list typechecking

我有以下列表:

ls1 = ['xxx', 3.88884, 2.383, 1.999, '-']

我想要做的是将浮点值转换为"%.2f",结果是:

['xxx', '3.88', '2.38', '1.99', '-']

但为什么这段代码失败了?

def stringify_result_list(reslist):
    finals = []
    print reslist
    for res in reslist:
        if type(res) == 'float':
           tmp = "%.2f" % res
           finals.append(tmp)
        else:
           finals.append(res)
    print finals
    return finals

 stringify_result_list(ls1)

1 个答案:

答案 0 :(得分:3)

type(res)不会返回您的想法:

>>> type(1.0)
<type 'float'>
>>> type(type(1.0))
<type 'type'>
>>>

如您所见,它返回浮点数的类型对象,而不是字符串"float"。您可以在docs

中了解此行为
  

class type(object)   
  class type(name, bases, dict)

     

使用一个参数,返回对象的类型。 返回值是类型对象。建议使用isinstance()内置函数   用于测试对象的类型。


也就是说,您可以使用list comprehension

大大简化您的功能
def stringify_result_list(reslist):
    return ["%.2f" % x if isinstance(x, float) else x for x in reslist]

您也会注意到我使用isinstance来测试每个项目是否为浮点数。正如上面引用的那样,这是Python中首选的类型检查方法。