在Python中展开元组
在下面的代码中:
a = 'a'
tup = ('tu', 'p')
b = 'b'
print 'a: %s, t[0]: %s, t[1]: %s, b:%s'%(a, tup[0], tup[1], b)
我该怎么做才能“展开”这个 tup
,这样我就不用一个个列出它里面的所有元素了?
注意 我并不是想直接打印 tup
,而是想打印它里面的每一个元素。换句话说,下面的代码不是我想要的:
>>> print 'a: %s, tup: %s, b: %s' % (a, tup, b)
a: a, tup: ('tu', 'p'), b: b
上面的代码打印了 tup
,但我想要的是把它的元素单独打印出来,中间加一些文字。
下面的代码不管用:
print 'a: %s, t[0]: %s, t[1]: %s, b:%s'%(a, tup, b)
In [114]: print '%s, %s, %s, %s'%(a, tup, b)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
TypeError: not enough arguments for format string
3 个回答
2
>>> print 'a: {0}, t[0]: {1[0]}, t[1]: {1[1]}, b:{2}'.format(a, tup, b)
a: a, t[0]: tu, t[1]: p, b:b
>>> print 'a: {a}, t[0]: {t[0]}, t[1]: {t[1]}, b:{b}'.format(a=a, t=tup, b=b)
a: a, t[0]: tu, t[1]: p, b:b
如果你喜欢的话,也可以使用命名参数。
9
把一个元组“扁平化”是可以做到的,具体可以参考这个链接。不过在你的情况下,直接通过拼接来构造一个新的元组会更简单一些。
'a: %s, t[0]: %s, t[1]: %s, b:%s'%((a,) + tup + (b,))
# ^^^^^^^^^^^^^^^^^
3
如果你想用格式化方法来做的话,可以这样写:
"{0}{2}{3}{1}".format(a, b, *tup)
在tup
后面,你必须给每个参数起名字,因为用*
把元组里的值拆开放到函数里时,语法是需要这样做的。