使用string.format舍入为float成员打印列表

时间:2013-12-04 19:49:57

标签: python

如果我有一个格式['ABC',0.1234,'DEF']的列表,我想打印出类似

的内容
l = ['ABC',0.1234,'DEF']
print('\t'.join(map(str, l)))

但我还要对浮点数进行舍入,以使输出为ABC\t0.12\tDEF

我可以用以下的方式做到:

a,b,c = l
print('{}\t{:.2f}\t{}'.format(a,b,c))

但由于l只是一个更大的列表中的一个成员,我希望能够通过列表理解或更加pythonic的方式来实现这一点。

3 个答案:

答案 0 :(得分:2)

您可以使用:

print('\t'.join("{:.2f}".format(x) if isinstance(x, float) else str(x) for x in l))

答案 1 :(得分:2)

您可以为此定义一个函数:

def float_or_str(x):
    try:
        return '{:.2f}'.format(x)
    except ValueError:
        return '{}'.format(x)

l = ['ABC',0.1234,'DEF']
print('\t'.join(map(float_or_str, l)))

产量

ABC 0.12    DEF

答案 2 :(得分:2)

正如评论中所提到的,你只需要做一个大清单:

print('{}\t{:.2f}\t{}'.format(*l))

请注意,.format()还支持为列表编制索引。类似的东西:

print('0[0] 0[1] 0[2]'.format(l))

修改

“这里的数据结构是三元组列表的列表。有没有直接的方法在未知大小的列表上进行字符串格式化?” 你可以尝试:

>>> print('\t'.join("{:.2f}".format(x) if isinstance(x, float) else str(x) for k
 in l for x in k))