Impression de tuple avec formatage de chaîne en Python

Donc, j'ai ce problème. J'ai eu tuple (1,2,3) que je devrais imprimer avec le formatage de chaîne. par exemple.

tup = (1,2,3)
print "this is a tuple %something" % (tup)

et cela devrait Imprimer la représentation de tuple avec des crochets, comme

C'est un tuple (1,2,3)

mais j'obtiens TypeError: not all arguments converted during string formatting à la place.

Comment pourrais-je faire cela? Un peu perdu ici, donc si vous pouviez m'indiquer une bonne direction :)

92
demandé sur Mr_and_Mrs_D 2009-09-21 21:03:45

10 réponses

>>> thetuple = (1, 2, 3)
>>> print "this is a tuple: %s" % (thetuple,)
this is a tuple: (1, 2, 3)

faire un tuple simple avec le tuple d'intérêt comme seul élément, c'est-à-dire la partie (thetuple,) , est le bit clé ici.

163
répondu Alex Martelli 2009-09-21 17:07:07

notez que la syntaxe % est obsolète. Utilisez str.format , qui est plus simple et plus lisible:

t = 1,2,3
print 'This is a tuple {0}'.format(t)
41
répondu Antimony 2013-08-27 14:03:11

plusieurs des réponses données ci-dessus étaient correctes. La bonne façon de le faire est:

>>> thetuple = (1, 2, 3)
>>> print "this is a tuple: %s" % (thetuple,)
this is a tuple: (1, 2, 3)

cependant, il y a eu un différend sur la question de savoir si l'opérateur de chaîne '%' est obsolète. Comme beaucoup l'ont souligné, il n'est certainement pas obsolète, car l'opérateur de chaîne '%' est plus facile de combiner une instruction String avec une liste de données.

exemple:

>>> tup = (1,2,3)
>>> print "First: %d, Second: %d, Third: %d" % tup
First: 1, Second: 2, Third: 3

Cependant, en utilisant la fonction .format() , vous finirez avec une déclaration verbale.

exemple:

>>> tup = (1,2,3)
>>> print "First: %d, Second: %d, Third: %d" % tup
>>> print 'First: {}, Second: {}, Third: {}'.format(1,2,3)
>>> print 'First: {0[0]}, Second: {0[1]}, Third: {0[2]}'.format(tup)

First: 1, Second: 2, Third: 3
First: 1, Second: 2, Third: 3
First: 1, Second: 2, Third: 3

plus, '%' opérateur de chaîne de caractères également utile pour nous de valider le type de données telles que %s , %d , %i , pendant ce temps .format () ne supporte que deux drapeaux de conversion : '!s' et '!r' .

23
répondu Fong Kah Chun 2017-03-29 09:12:28
>>> tup = (1, 2, 3)
>>> print "Here it is: %s" % (tup,)
Here it is: (1, 2, 3)
>>>

noter que (tup,) est un tuple contenant un tuple. L'extérieur tuple est l'argument de l'opérateur%. Le tuple intérieur est son contenu, qui est en fait imprimé.

(tup) est une expression entre parenthèses qui, lorsqu'elle est évaluée, donne tup .

(tup,) avec la virgule arrière est un tuple, qui contient tup comme seul membre.

20
répondu Vinay Sajip 2009-09-21 17:08:40

cela n'utilise pas le formatage de chaîne, mais vous devriez être en mesure de faire:

print 'this is a tuple ', (1, 2, 3)

si vous voulez vraiment utiliser le formatage de chaîne de caractères:

print 'this is a tuple %s' % str((1, 2, 3))
# or
print 'this is a tuple %s' % ((1, 2, 3),)

Note, ceci suppose que vous utilisez une version Python antérieure à 3.0.

8
répondu TM. 2009-09-21 17:06:49
t = (1, 2, 3)

# the comma (,) concatenates the strings and adds a space
print "this is a tuple", (t)

# format is the most flexible way to do string formatting
print "this is a tuple {0}".format(t)

# classic string formatting
# I use it only when working with older Python versions
print "this is a tuple %s" % repr(t)
print "this is a tuple %s" % str(t)
4
répondu Esteban Küber 2009-09-21 17:14:32

je pense que la meilleure façon de faire ceci est:

t = (1,2,3)

print "This is a tuple: %s" % str(t)

si vous êtes familier avec le formatage de style printf , alors Python supporte sa propre version. En Python, cela se fait en utilisant l'opérateur "%" appliqué aux chaînes (une surcharge de l'opérateur modulo), qui prend n'importe quelle chaîne et lui applique le formatage de style printf.

dans notre cas, nous lui disons d'imprimer "This is a tuple:", puis d'ajouter une chaîne "%s", et pour la chaîne actuelle, nous passons dans une représentation string du tuple (en appelant str(t)).

si vous n'êtes pas familier avec le formatage de style printf, je suggère fortement l'apprentissage, car il est très standard. La plupart des langues d'une façon ou d'une autre.

1
répondu Edan Maor 2009-09-21 19:38:45

veuillez noter qu'une virgule sera ajoutée si le tuple n'a qu'un article. e.g:

t = (1,)
print 'this is a tuple {}'.format(t)

et vous aurez:

'this is a tuple (1,)'

dans certains cas, par exemple vous voulez obtenir une liste de citations à utiliser dans la chaîne de requête mysql comme

SELECT name FROM students WHERE name IN ('Tom', 'Jerry');

vous devez considérer pour supprimer la virgule de queue utiliser Remplacer(',)', ')') après le formatage parce qu'il est possible que le tuple ait seulement 1 item comme ('Tom',), donc la queue virgule doit être supprimé:

query_string = 'SELECT name FROM students WHERE name IN {}'.format(t).replace(',)', ')')

s'il vous plaît suggérer si vous avez moyen décent de supprimer cette virgule dans la sortie.

0
répondu Jacob CUI 2014-10-08 05:27:29

Essayez ceci pour obtenir une réponse:

>>>d = ('1', '2') 
>>> print("Value: %s" %(d))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: not all arguments converted during string formatting

si nous mettons seulement-un tuple à l'intérieur (), il fait un tuple lui-même:

>>> (d)
('1', '2')

cela signifie que la déclaration d'Impression ci-dessus ressemblera à: print("Valeur: %s" %('1', '2')) ce qui est une erreur!

D'où:

>>> (d,)
(('1', '2'),)
>>> 

ci-dessus sera alimenté correctement aux arguments de l'impression.

0
répondu Yogi 2018-06-01 21:23:20

c'est facile de Parler, de vous montrer le code:

>>> tup = (10, 20, 30)
>>> i = 50
>>> print '%d      %s'%(i,tup)
50  (10, 20, 30)
>>> print '%s'%(tup,)
(10, 20, 30)
>>> 
-5
répondu 123 2017-05-10 01:39:14