我有以下列表:
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)
答案 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中首选的类型检查方法。