当前位置: 首页 > 面试题库 >

使用.format()格式化带有字段宽度参数的列表

伯英武
2023-03-14
问题内容

我最近(终于?)开始使用.format()它,对此可能有一个模糊的问题。

给定

res = ['Irene Adler', 35,  24.798]

(1) print('{0[0]:10s} {0[1]:5d} {0[2]:.2f}'.format(res))
(2) print('{:{}s} {:{}d} {:{}f}'.format(res[0], 10, res[1], 5, res[2], .2))

工作出色,并且都可以打印:

Irene Adler    35 24.80
Irene Adler    35 24.80

我不知道我可以像(1)中那样处理列表,这很简洁。我以前曾经看过关于字段宽度参数(2)的旧%格式。

我的问题是想要做这样的事情,将(1)和(2)结合起来:

(3) print('{0[0]:{}s} {0[1]:{}d} {0[2]:{}f}'.format(res, 10, 5, .2))

但是,我无法做到这一点,即使有可能,我也无法从文档中找出答案。只需提供要打印的列表以及width参数即可。

顺便说一句,我也尝试过这个(没有运气):

args = (10, 5, .2)
(4) print('{0[0]:{}s} {0[1]:{}d} {0[2]:{}f}'.format(res, args))

在这两种情况下,我得到:

D:\Users\blabla\Desktop>python tmp.py
Traceback (most recent call last):
  File "tmp.py", line 27, in <module>
    print('{0[0]:{}s} {0[1]:{}d} {0[2]:{}f}'.format(res, 10, 5, .2))
ValueError: cannot switch from manual field specification to automatic field numbering

D:\Users\blabla\Desktop>python tmp.py
Traceback (most recent call last):
  File "tmp.py", line 35, in <module>
    print('{0[0]:{}s} {0[1]:{}d} {0[2]:{}f}'.format(res, args))
ValueError: cannot switch from manual field specification to automatic field numbering

我也尝试使用zip()合并两个序列而没有运气。

我的问题是:

我可以指定要进行有效打印的列表,以完成在(3)和(4)中尝试执行的操作吗(显然,如果可能的话,我使用的语法不正确),如果可以,如何执行?


问题答案:

错误讯息

ValueError: cannot switch from manual field specification to automatic field numbering

几乎说明了一切:您需要在任何地方提供明确的字段索引,并且

print('{0[0]:{1}s} {0[1]:{2}d} {0[2]:{3}f}'.format(res, 10, 5, .2))

工作良好。



 类似资料:
  • 我想使用Google Gson库(de)序列化一个具有参数化成员字段的参数化类型。 这将引发

  • rank ▲ ✰ vote url 70 354 145 282 url 字符串格式化:%和.format Python2.6推出了[str.format()]方法,和原有的%格式化方式有小小的区别.那个方法更好? 下面的方法有同样的输出,它们的区别是什么? #!/usr/bin/python sub1 = "python string!" sub2 = "an arg" a = "i

  • 本文向大家介绍Python中用format函数格式化字符串的用法,包括了Python中用format函数格式化字符串的用法的使用技巧和注意事项,需要的朋友参考一下 自python2.6开始,新增了一种格式化字符串的函数str.format(),可谓威力十足。那么,他跟之前的%型格式化字符串相比,有什么优越的存在呢?让我们来揭开它羞答答的面纱。 语法 它通过{}和:来代替%。 “映射”示例 通过位置

  • .format在许多方面看起来更便利.对于%最烦人的是它无法同时传递一个变量和元组.你可能会想下面的代码不会有什么问题: "hi there %s" % name 但是,如果name恰好是(1,2,3),它将会抛出一个TypeError异常.为了保证它总是正确的,你必须这样做: "hi there %s" % (name,) # 提供一个单元素的数组而不是一个参数 但是有点丑..forma

  • 问题内容: 假设我有: 这将输出: 接下来,我们有: 这将输出: 是否有一些解决方法来防止发生此错误,例如: 如果keyrror:忽略,则不理会它(但要解析其他人) 比较格式字符串和可用的命名参数,如果缺少则添加 问题答案: 如果您使用的是Python 3.2+,则可以使用str.format_map()。 对于: 对于: 在Python 2.6 / 2.7中 对于: 对于:

  • 问题 你有一些长字符串,想以指定的列宽将它们重新格式化。 解决方案 使用 textwrap 模块来格式化字符串的输出。比如,假如你有下列的长字符串: s = "Look into my eyes, look into my eyes, the eyes, the eyes, \ the eyes, not around the eyes, don't look around the eyes, \