如何使用str.format()处理嵌套列表,使浮点数保留3位小数且其他类型不变
报错原因
你代码的报错是因为"{:.2f}"格式符要求传入浮点型数据,但你传入的是每个子列表对象x,列表类型不支持浮点格式渲染,因此抛出类型错误。此外你当前代码也没有实现分元素处理、制表符分隔的需求。
修复实现代码
基础可读版本
通过类型判断分别处理每个元素,浮点数保留3位小数,其余类型保持原有格式,元素用制表符分隔:
for sub_list in list_of_lists: processed = [] for item in sub_list: if isinstance(item, float): # 浮点数保留3位小数 processed.append("{:.3f}".format(item)) else: # 其他类型保留原生表示,字符串会自带单引号和示例一致 processed.append(repr(item)) # 制表符拼接后输出 print("\t".join(processed))
简洁列表推导式版本
for sub_list in list_of_lists: print("\t".join([ "{:.3f}".format(item) if isinstance(item, float) else repr(item) for item in sub_list ]))
效果验证
对于你给出的示例输入[[0,'pan', 17.892, 4.6555], [4, 'dogs', 19.2324, 1.4564]],运行后输出结果为:
0 'pan' 17.892 4.656 4 'dogs' 19.232 1.456
注:默认.3f会对浮点数做四舍五入,如果需要截断而非四舍五入,可以额外对浮点数做取整运算后再格式化。如果不需要字符串外层的单引号,把repr(item)替换为"{}".format(item)即可。
内容的提问来源于stack exchange,提问作者thedingo
相关产品推荐
相关产品推荐

