python-3.x 如何使用f字符串在列表内舍入

bzzcjhmw  于 2023-01-27  发布在  Python
关注(0)|答案(2)|浏览(170)

我想用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}")
am46iovg

am46iovg1#

可以将变量bruh[i][1]更改为"{0:.2f}".format(a),并在循环中打印该变量:

for i in range(len(bruh)):
  a=sum(bruh[i][1])/len(bruh[i][1]) 
  bruh[i][1]="{0:.2f}".format(a)
  print(bruh[i])
cygmwpex

cygmwpex2#

当你尝试使用f-字符串来格式化一个列表时,会调用列表对象的format方法,这个方法并没有被实现来处理格式化表达式,因此,python会引发错误“unsupported format string passed to list.format”。
如果你试过

for i in range(len(bruh)):
    a = sum(bruh[i][1]) / len(bruh[i][1])
    bruh[i][1] = a
    print(f'{bruh[i][0]}: {bruh[i][1]:.2f}')

你还是会得到

TypeError: unsupported format string passed to list.__format__

因为python解释器试图调用带有格式说明符.2f的list对象的format方法。但是,list对象的format方法没有被实现来处理像.2f这样的格式化表达式,并且它不知道如何使用该说明来格式化数字列表。
一种解决方法是:除了使用f-string来格式化整个列表,你还可以在for循环中使用f-string来格式化列表中的每一个元素,下面是一个例子来说明你是如何做到这一点的:

for i in range(len(bruh)):
    a = sum(bruh[i][1]) / len(bruh[i][1])
    bruh[i][1] = round(a, 2)
    print(f"{bruh[i][0]}: {bruh[i][1]}")

也可以使用列表解析代替for循环来实现相同的结果

bruh = [[i[0], round(sum(i[1])/len(i[1]), 2)] for i in bruh]
print(bruh)

相关问题