如何用f-string对列表内数值取整?触发unsupported format string报错
问题:f-string格式化列表报错:
unsupported format string passed to list.__format__ 我想用f-string对列表中的数值取整,但运行代码时触发错误:unsupported format string passed to list.__format__,代码如下:
IS_gradebooks = [['ISOM2020', [59, 100, 80, 55, 95, 87, 95, 98, 74, 69, 92, 94, 75, 97, 43, 57]], ['ISOM3400', [98, 73, 45, 88, 72, 94, 82, 100, 89, 52]], ['ISOM3600', [24, 44, 100, 81, 91, 93, 87, 72, 55]], ['ISOM4200', [90, 56, 78, 67, 90, 93]] ] bruh=IS_gradebooks for i in range(len(bruh)): a=sum(bruh[i][1])/len(bruh[i][1]) bruh[i][1]=a print(f"{bruh:.2f}")
错误原因
你直接用f"{bruh:.2f}"试图格式化整个列表对象,但f-string的.2f格式仅支持数值类型(int、float等),列表本身不支持这种格式化规则,因此触发报错。
解决方案
需要针对列表中每个课程的平均分数值单独格式化,而非格式化整个列表。以下是两种可行写法:
写法1:生成格式化后的列表或逐个打印
IS_gradebooks = [['ISOM2020', [59, 100, 80, 55, 95, 87, 95, 98, 74, 69, 92, 94, 75, 97, 43, 57]], ['ISOM3400', [98, 73, 45, 88, 72, 94, 82, 100, 89, 52]], ['ISOM3600', [24, 44, 100, 81, 91, 93, 87, 72, 55]], ['ISOM4200', [90, 56, 78, 67, 90, 93]] ] # 计算平均分,改用更简洁的遍历方式 for course in IS_gradebooks: scores = course[1] course[1] = sum(scores) / len(scores) # 方式A:逐个格式化打印课程和平均分 for course in IS_gradebooks: print(f"{course[0]}: {course[1]:.2f}") # 方式B:生成包含格式化后数值的新列表再打印 formatted_gradebooks = [[course[0], f"{course[1]:.2f}"] for course in IS_gradebooks] print(formatted_gradebooks)
写法2:直接打印时处理整个列表的格式
如果希望输出的整体结构和原列表一致,只是数值保留两位小数,可以在打印时遍历处理每个元素:
# 接上面的平均分计算代码 print("[", end="") for idx, course in enumerate(IS_gradebooks): if idx > 0: print(", ", end="") print(f"['{course[0]}', {course[1]:.2f}]", end="") print("]")
额外提示
原代码中bruh=IS_gradebooks是浅引用,修改bruh会直接改变原列表IS_gradebooks。如果不想修改原列表,可改用列表推导式实现浅拷贝:
bruh = [item.copy() for item in IS_gradebooks]
内容的提问来源于stack exchange,提问作者Gartz man
相关产品推荐
相关产品推荐

