Python - 用于字符串格式化运算符的列表解包的简短方式是什么?

9

不幸的是, * 或 ** 运算符的变化似乎无法使用:

lstData = [1,2,3,4]
str = 'The %s are %d, %d, %d, and %d' % ('numbers', *lstData)

有没有简单的方法?
3个回答

13

使用格式化字符串

str = 'The {} are {}, {}, {}, and {}'.format('numbers', *lstData)

请参考文档以了解更多有关可能的格式化(浮点数、小数点、转换等)的详细信息。


你包含了文档链接。你的目标更加准确。 - Jakob Bowyer
你有没有想过为什么序列解包只适用于第二个参数?它的签名是 format(positional, *args, **kwargs) 吗?如果你可以传递 (*seq1, *seq2, *...),它将会更加强大。JavaScript ES6 支持这种方式:Math.min(...[...seq1, ...seq2]) - CodeManX
从文档中可以看到,它是 str.format(*args, **kwargs)。据我理解,这些参数在传递给函数之前会被解包。你可以解包任意多个列表,但它们都将被分配到函数中的同一个参数列表中。在上面的示例中,'numbers'*listData 都将作为同一元组的一部分传递到 *args 中。 - bindsniper001
你在Python中实现JS示例的方法是创建一个带有一个参数min(*args)的函数。你可以通过将任意多个序列传递给它来调用这样的函数,例如:min(*seq1, *seq2, *seq3) - bindsniper001

4
s = 'The %s are %d, %d, %d, and %d' % tuple(['numbers'] + lstData)

2
>>> data = range(5)
>>> 'The {0} are {1}, {2}, {3}, {4} and {5}'.format('numbers', *data)
'The numbers are 0, 1, 2, 3 and 4'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接