如果我有一个格式['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的方式来实现这一点。
答案 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))