TypeError:传递给列表的格式字符串不受支持。__format__

时间:2018-09-17 18:52:44

标签: python

我有两个列表,分别命名为result和p_results。我想在表中显示这些列表值,例如if

results = [1,2,3,4]
p_results = [5,6,7,8]

我想要这样的东西

1     5
2     6
3     7
4     8

        print('{:3}{:20}'.format(results, p_results))

运行代码:

runfile('D:/4/2d.py', wdir='D:/4')
Traceback (most recent call last):

  File "<ipython-input-59-1abb0c96f0c0>", line 1, in <module>
    runfile('D:/4/2d.py', wdir='D:/4')

  File "C:\Users\Rabinsen\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 668, in runfile
    execfile(filename, namespace)

  File "C:\Users\Rabinsen\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 108, in execfile
    exec(compile(f.read(), filename, 'exec'), namespace)

  File "D:/4/2d.py", line 61, in <module>
    print('{:3}{:20}'.format(results, p_results))

TypeError: unsupported format string passed to list.__format__

6 个答案:

答案 0 :(得分:2)

您可以将list类型传递给format(仅使用{}),但是您要求的格式不可用。而且标准格式也不适合,所以...

您想要的是将每个列表放在一个单独的列上。您必须将zip一起列出,然后迭代结果以将其传递给格式:

results = [1,2,3,4]
p_results = [5,6,7,8]

for result,p_result in zip(results,p_results):
    print('{:3}{:20}'.format(result,p_result))

打印类似:

  1                   5
  2                   6
  3                   7
  4                   8

答案 1 :(得分:1)

如果你仍然想用一行来做,写:

results = [1,2,3,4]
p_results = [5,6,7,8]

[print("{:3}{:20}".format(*x)) for x in np.c_[results,p_results]][0]

打印:

  1                   5
  2                   6
  3                   7
  4                   8

可以肯定的是,np 适用于 NumPy

答案 2 :(得分:0)

您尝试过print('{},{}'.format(results[:3], p_results[:20]))

print的结构看起来像是两种样式的组合,

print(f'{results[:3]}, {p_results[:20]}')

print('{}, {}'.format(results[:3], p_results[:20]))

您的尝试是

print('{:3}, {:20}'.format(results, p_results))

这是您错误的根源,在此示例中重现了相同的错误:

>>> a = [1, 2, 3]
>>> print('{:1}'.format(a))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported format string passed to list.__format__

>>> print('{}'.format(a[:1]))
[1]

答案 3 :(得分:0)

我建议您为此使用熊猫库

import pandas as pd
results = [1,2,3,4]
p_results = [5,6,7,8]
d = {'column-1':results, 'column-2':p_results}
data_frame = pd.DataFrame(data=d)
print(data_frame)
   column-1  column-2
0         1         5
1         2         6
2         3         7
3         4         8

请注意,您具有使用数据框对象

的索引

您还可以使新列成为一种操作,例如 让我们创建第三列以存储列1和列2的乘积

data_frame['product'] = data_frame['column-1']*data_frame['column-2']

您现在得到的打印结果是:

   column-1  column-2  product
0         1         5        5
1         2         6       12
2         3         7       21
3         4         8       32

希望这会有所帮助! 编码愉快!

答案 4 :(得分:0)

一个技巧是解决这个问题:

'{:15}'.format('{}'.format([1,2,3]))

答案 5 :(得分:0)

基于@istvan 解决方案,只需用 str 包装您的列表:

f'{str(my_list):15}{str(my_other_list):25}'

(或者如果你坚持@istvan 的例子:)

'{:15}'.format(str([1,2,3]))
# or
f'{str([1,2,3]):15}'