在Python 2中,我可以将列表传递给百分号格式化运算符吗?
我有一堆东西想用格式化字符串打印出来。在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'