python.format()重复字段?

python.format()重复字段?,python,python-3.x,Python,Python 3.x,我知道在python3中,您可以执行以下操作: >>> '{0} {1} {0}'.format(13, 42) '13 42 13' 所以你多次使用同一个论点。我想做相反的事。我有一系列的数字。我希望以某种方式使用单个格式说明符打印它们,但我看不到一种方法可以向format语法指示给定标识符应该使用接下来的N个参数。我可以用减量机 >>> reduce(lambda out,x: out + '{:02X}'.format(x), b'\x60\x0d\x

我知道在python3中,您可以执行以下操作:

>>> '{0} {1} {0}'.format(13, 42)
'13 42 13'
所以你多次使用同一个论点。我想做相反的事。我有一系列的数字。我希望以某种方式使用单个格式说明符打印它们,但我看不到一种方法可以向
format
语法指示给定标识符应该使用接下来的N个参数。我可以用减量机

>>> reduce(lambda out,x: out + '{:02X}'.format(x), b'\x60\x0d\x1a\xdd', '')
'600D1ADD'

但我希望只调用一个格式,因为我想在其他格式的序列中放置一些其他字符。

没有任何方法可以做到这一点。您可以做的是预先格式化数字列表,然后将格式化字符串作为单个项目传递给第二轮格式化:

>>> nums = (13, 42)
>>> '{0} is {1}'.format('my stuff', ''.join('{:02X}'.format(a) for a in nums))
'my stuff is 0D2A'
如果需要,可以编写一个自定义格式化程序子类,将数字序列作为要格式化的单个项接受,并将它们一起格式化。这可以让我们做一些类似于
myFormatter.format({0}是{1:list},“‘我的东西’,(13,42))
。以下是它的工作原理:

class ListFormatter(string.Formatter):
    def format_field(self, value, spec):
        if spec == 'list':
            return ''.join('{:02X}'.format(a) for a in value)
        else:
            return super(ListFormatter, self).format_field(value, spec)

>>> lf = ListFormatter()
>>> lf.format('{0} is {1:list}', 'my stuff', [1, 43])
'my stuff is 012B'

像这样的事情怎么样:

list=[13,14,42,43]


out='''.join(['{0}'。在列表中为x设置格式(x))

我使用了以下方法:

>>> list = [13, 14, 42, 43]
>>> ('0x' + len (list) * '{:02X}') .format (*list)
'0x0D0E2A2B'

谢谢你的回答。我希望不是这样。但很高兴知道它只是没有那种支持。