Réponse courte, vous devez implémenter vous-même, si vous voulez garder la sortie dans ce format:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
my_list = ['éléphant', 'Hello World']
def print_list (l):
print ("[" + ", ".join(["'%s'" % str(x) for x in l]) + "]")
print_list (my_list)
Qui génère le
['éléphant', 'Hello World']
Cependant, notez qu'il mettrait tous les éléments entre guillemets (nombres pairs, par exemple), de sorte que vous pourriez avoir besoin d'une implémentation plus complexe, si vous attendez autre chose que des chaînes sur votre liste.
réponse plus longue
Le problème est que Python fonctionne str(my_list)
sous le capot, avant de l'imprimer. Et cela, à son tour, exécute repr()
sur chacun des éléments de la liste.
Maintenant, repr()
sur une chaîne renvoie une représentation ASCII uniquement de la chaîne. C'est-à-dire que les '\ xc3' que vous voyez sont une barre oblique inverse réelle, un 'c' réel et un réel '3' caractères.
Vous ne pouvez pas contourner cela, comme le problème est sur l'implémentation de list.__str__()
. Ci-dessous, un exemple de programme pour le démontrer.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# vi: ai sts=4 sw=4 et
import pprint
my_list = ['éléphant', 'Hello World']
# under the hood, python first runs str(my_list), before printing it
my_list_as_string = str(my_list)
# str() on a list runs repr() on each of the elements.
# However, it seems that __repr__ on a string transforms it to an
# ASCII-only representation
print ('str(my_list) = %s' % str(my_list))
for c in my_list_as_string:
print c
print ('len(str(my_list)) = %s' % len(str(my_list)))
print ("\n")
# Which we can confirm here, where we can see that it it also adds the quotes:
print ('repr("é") == %s' % repr("é"))
for c in repr("é"):
print c
print ('len(repr("é")) == %s' % len(repr("é")))
print ("\n")
# Even pprint fails
print ("pprint gives the same results")
pprint.pprint(my_list)
# It's useless to try to encode it, since all data is ASCII
print "Trying to encode"
print (my_list_as_string.encode ("utf8"))
qui génère ceci:
str(my_list) = ['\xc3\xa9l\xc3\xa9phant', 'Hello World']
[
'
\
x
c
3
\
x
a
9
l
\
x
c
3
\
x
a
9
p
h
a
n
t
'
,
'
H
e
l
l
o
W
o
r
l
d
'
]
len(str(my_list)) = 41
repr("é") == '\xc3\xa9'
'
\
x
c
3
\
x
a
9
'
len(repr("é")) == 10
pprint gives the same results
['\xc3\xa9l\xc3\xa9phant', 'Hello World']
Trying to encode
['\xc3\xa9l\xc3\xa9phant', 'Hello World']
Vous pouvez faire quelque chose comme ça pour encoder votre déclaration 'print':' >>> print repr (my_list) .decode ("unicode-évasion") .encode ('latin-1') ' J'ai posté cela comme une réponse mais je l'ai supprimé puisque je l'ai seulement testé dans python2, donc je commente maintenant. –
@ ViníciusAguiar J'utilisais en effet python2. Votre réponse fonctionne bien si vous remplacez «latin-1» par «utf-8» – fonfonx
Oh, c'est bien! Je ne vais pas le supprimer car il semble qu'il y ait déjà quelques bonnes réponses. Merci de me le faire savoir! =) –