如何使用str.format()修改列表列表,使浮点值为3位小数,而其他数据类型保持不变



我有一个非常大的列表列表,看起来像这样:

list_of_lists = [[0,'pan', 17.892, 4.6555], [4, 'dogs', 19.2324, 1.4564], ...]

我需要使用str.format((对其进行修改,以便浮点运算到小数点后3位,其余数据保持正确的格式。我还需要在每个列表条目之间添加一个选项卡,这样它看起来很有组织,有点像这样:

0   'pan'   17.892   4.655
4   'dogs'  19.232   1.456
...

等等。

我的问题是,我一直在我的for循环中得到错误,并设法修复它。

for x in list_of_lists:
print ("{:.2f}".format(x))
TypeError: unsupported format string passed to list.__format__

在循环中,您正在遍历嵌套列表。这意味着x本身也是一个列表,而不是format()函数的有效参数。

如果内部列表中的元素数量很小,并且这在问题的上下文中是有意义的,那么您可以简单地将所有元素列为参数:

list_of_lists = [[0,'pan', 17.892, 4.6555], [4, 'dogs', 19.2324, 1.4564]]
for x in list_of_lists:
print ("{:d}t{:s}t{:.3f}t{:.3f}".format(x[0], x[1], x[2], x[3]))

这些现在是用制表符分隔的,浮点值有三位小数。

for x in list_of_lists:
print ("{:.2f}".format(x))

这只是在顶级数组上循环,而不是在里面的元素上循环,因此您会得到错误。

尝试单独寻址元素

# build manually, join with tab-char and print on loop 
for i in s:
result = []
result.append( f'{i[0]}' )
result.append( f'{i[1]}' )
result.append( f'{i[2]:.3f}' )
result.append( f'{i[3]:.3f}' )
print( 't'.join(result) )
# build in one line and print
for i in s:
print( f'{i[0]}t'{i[1]}'t{i[2]:.3f}t{i[3]:.3f}'

或者作为一个列表理解

# build whole line from list comprehension, join on new-line chat
result = [f'{i[0]}t'{i[1]}'t{i[2]:.3f}t{i[3]:.3f}' for i in s]
result = 'n'.join(result)
print(result
# all in one line
print( 'n'.join([f'{i[0]}t'{i[1]}'t{i[2]:.3f}t{i[3]:.3f}' for i in s]))

最新更新