在Python 2中,我可以将列表传递给百分号格式化运算符吗?

6 投票
2 回答
3419 浏览
提问于 2025-04-28 03:30

我有一堆东西想用格式化字符串打印出来。在Python 3的写法中,使用 "a string".format(arg,arg,arg) 这样做很简单。我只需要用 *mylist 来替换参数,比如:

mylist = [1,2,3]
"{} {} {}".format(*mylist)

但是我发现用老式的百分号格式化方法做不到。我试过像 "%i %i %i" % mylist"%i %i %i" % (mylist)"%i %i %i" % (*mylist) 这样的写法,但总是出现语法错误或者提示“参数不够”。

在2.x的写法中,这真的做不到吗?

补充说明:我在上面的例子中做了修改,其实我是指列表,而不是元组。我还在学习中,对这两种不同的数组结构不太熟悉。

暂无标签

2 个回答

1

如果你想要打印一个用空格分开的列表,这里有一个更灵活的解决方案,可以支持任意数量的元素。

>>> l = [5,4,3,2,1]
>>> ' '.join(map(str,l))
'5 4 3 2 1'

这个方法也适用于元组。

>>> l = (5,4,3,2,1)
>>> ' '.join(map(str,l))
'5 4 3 2 1'
7

str % tuple 应该可以正常使用。

>>> mylist = (1, 2, 3)  # <---- tuple
>>> "%i %i %i" % mylist
'1 2 3'

顺便说一下,(1, 2, 3) 是一个元组,不是列表。

>>> mylist = [1, 2, 3]  # <----- list
>>> "%i %i %i" % mylist
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: %d format: a number is required, not list

如果你想让它适用于列表,就把列表转换成元组。

>>> "%i %i %i" % tuple(mylist)
'1 2 3'

撰写回答