2010-08-08 6 views
2

Dans le code suivant:tuples en python Expanding

a = 'a' 
tup = ('tu', 'p') 
b = 'b' 
print 'a: %s, t[0]: %s, t[1]: %s, b:%s'%(a, tup[0], tup[1], b) 

Comment puis-je « développer » (ne peut pas trouver un meilleur verbe) tup pour que je n'ai pas de lister explicitement tous ses éléments?

NOTE Que je ne veux pas imprimer tup en soi, mais ses éléments individuels. En d'autres termes, le code suivant est pas ce que je cherche

>>> print 'a: %s, tup: %s, b: %s' % (a, tup, b) 
a: a, tup: ('tu', 'p'), b: b 

Le code ci-dessus imprimé tup, mais je veux l'imprimer est des éléments indépendamment, avec un texte entre les éléments.

Ce qui suit ne fonctionne pas:

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 
+0

Dans Ruby on l'appelle splatting; vous trouverez plus d'informations sur http://stackoverflow.com/questions/1141504/name-this-python-ruby-language-construct-using-array-values-to-satisfy-function, mais je ne pense pas que ce soit applicable dans votre cas particulier. –

Répondre

3

Si vous souhaitez utiliser plutôt la méthode de format, vous pouvez juste faire:

"{0}{2}{3}{1}".format(a, b, *tup)

Vous avez de nommer tous les paramater après tup parce que la syntaxe pour décompresser les tuples aux appels de fonction en utilisant * l'exige.

+2

Je préfère le format '{0} {2} {3} {1}'. (A, b, * tup) '. – kennytm

+0

+1, je vais changer le poste – aaronasterling

+0

+1 pour l'avenir-preuve Python 3.0 et la lisibilité. @bgbg: Regardez [Syntaxe de chaîne de format] (http://docs.python.org/library/string.html#format-string-syntax) et [Format Specification Mini-Language] (http: //docs.python. org/library/string.html # format-spécification-mini-langue). Ce sont mes références préférées pour utiliser '.format()' – Kit

7

Il est possible de flatten a tuple, mais je pense que dans votre cas, la construction d'un nouveau tuple par concaténation est plus facile.

'a: %s, t[0]: %s, t[1]: %s, b:%s'%((a,) + tup + (b,)) 
#         ^^^^^^^^^^^^^^^^^ 
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 

Vous pouvez également utiliser des paramètres nommés si vous préférez

>>> 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 
Questions connexes