Pour expliquer pourquoi la liste n'est pas "correctement" imprimée, print(["Sam"])appelle repr("Sam"), qui retourne 'Sam'(avec les guillemets), contrairement à quand vous appelez print("Sam")et python appelle str("Sam")qui retourne Sam(sans les guillemets). Voir la différence entre stretrepr ou Python stret lists pour plus d'informations.
Cela utilise la map()fonction pour appeler str pour chaque élément de mylist , créant une nouvelle liste de chaînes qui est ensuite jointe en une chaîne avec str.join(). Ensuite, l' %opérateur de mise en forme de chaîne remplace la chaîne par au lieu de %sin "[%s]".
Merci qui fonctionne très bien. Pouvez-vous expliquer un peu en détail ce que vous faites dans la deuxième ligne? Je suis nouveau sur python.
Obaid
19
Il utilise la mapfonction à appeler strpour chaque élément de mylist, créant une nouvelle liste de chaînes qu'il joint ensuite en une chaîne avec str.join. Ensuite, il utilise l' %opérateur de mise en forme de chaîne pour remplacer la chaîne dans au lieu de %sin "[%s]".
li.davidm
6
Une autre façon de faire qui est peut-être un peu plus moderne: "[{0}]".format(", ".join(str(i) for i in mylist))
Jack O'Connor
2
j'ai tendance à préférer map(f, xs)(ou imapen python2.x) à (f(x) for x in xs), quand fest un appelable prédéfini; qui a tendance à exécuter moins de bytecodes et est généralement plus compact. Certainement pasmap(lambda x:..., xs) c'est bien pire que(... for x in xs)
SingleNegationElimination
1
@ user1767754: vraiment? Lien?
SingleNegationElimination
18
C'est un code simple, donc si vous êtes nouveau, vous devriez le comprendre assez facilement.
mylist =["x",3,"b"]for items in mylist:print(items)
Il les imprime tous sans guillemets, comme vous le vouliez.
Je suis confus par cela. Le type de données long filtre-t-il la liste d'une manière ou d'une autre?
dval
Une version plus concise seraitprint(end='['); print(*l, sep=', ', end=']\n')
Anonyme
9
Au lieu d'utiliser map, je recommanderais d'utiliser une expression de générateur avec la capacité d' joinaccepter un itérateur:
def get_nice_string(list_or_iterator):return"["+", ".join( str(x)for x in list_or_iterator)+"]"
Voici joinune fonction membre de la classe string str. Il prend un argument: une liste (ou itérateur) de chaînes, puis retourne une nouvelle chaîne avec tous les éléments concaténés par, dans ce cas ,,.
Une bonne optimisation pour Python 2, puisque map renvoie une liste en 2.x. Il renvoie un générateur dans 3.x, donc cela n'aide pas autant là-bas.
Tom Zych
7
Je reviendrais", ".join( str(x) for x in list_or_iterator).join('[]')
eyquem
@eyquem: Intelligent, je n'ai jamais vu de jointure utilisée comme ça auparavant. Pourtant, c'est un peu plus opaque pour un débutant (puisque vous utilisez la propriété qu'une chaîne est un conteneur itérable de chaînes à un caractère).
Seth Johnson
6
Vous pouvez supprimer tous les caractères indésirables d'une chaîne en utilisant sa translate()méthode avec Nonepour l' tableargument suivi d'une chaîne contenant le (s) caractère (s) que vous souhaitez supprimer pour son deletecharsargument.
Si vous utilisez une version de Python antérieure à la 2.6, vous devrez utiliser la fonction stringdu module à la translate()place car la possibilité de passer en Nonetant tablequ'argument n'a été ajoutée qu'à partir de Python 2.6. Son utilisation ressemble à ceci:
@eyquem: Oui, éviter la suppression de caractères qui font réellement partie de vos données (plutôt que d'être strictement utilisés pour les délimiter) nécessiterait naturellement une logique légèrement plus élaborée / différente si c'est une possibilité.
martineau
3
Voici une session interactive montrant certaines des étapes du one-liner de @ TokenMacGuy. Il utilise d'abord la mapfonction pour convertir chaque élément de la liste en une chaîne (en fait, il crée une nouvelle liste, ne convertit pas les éléments de l'ancienne liste). Ensuite, il utilise la méthode string joinpour combiner ces chaînes avec', ' entre elles. Le reste n'est que du formatage de chaîne, ce qui est assez simple. (Modifier: cette instance est simple; le formatage des chaînes en général peut être quelque peu complexe.)
Notez que l'utilisation joinest un moyen simple et efficace de créer une chaîne à partir de plusieurs sous-chaînes, beaucoup plus efficace que de le faire en ajoutant successivement des chaînes aux chaînes, ce qui implique beaucoup de copie en arrière-plan.
>>> mylist =['x',3,'b']>>> m = map(str, mylist)>>> m
['x','3','b']>>> j =', '.join(m)>>> j
'x, 3, b'
Il n'utilise que la formatméthode. Aucune trace de str, et il permet un réglage fin du format des éléments. Par exemple, si vous avez des nombres flottants comme éléments de la liste, vous pouvez ajuster leur format, en ajoutant un spécificateur de conversion, dans ce cas:.2f
print(["Sam"])
appellerepr("Sam")
, qui retourne'Sam'
(avec les guillemets), contrairement à quand vous appelezprint("Sam")
et python appellestr("Sam")
qui retourneSam
(sans les guillemets). Voir la différence entrestr
etrepr
ou Pythonstr
etlist
s pour plus d'informations.Réponses:
Dans Python 2:
En Python 3 (où
print
est une fonction intégrée et non plus une fonction de syntaxe):Les deux reviennent:
Cela utilise la
map()
fonction pour appeler str pour chaque élément de mylist , créant une nouvelle liste de chaînes qui est ensuite jointe en une chaîne avecstr.join()
. Ensuite, l'%
opérateur de mise en forme de chaîne remplace la chaîne par au lieu de%s
in"[%s]"
.la source
map
fonction à appelerstr
pour chaque élément demylist
, créant une nouvelle liste de chaînes qu'il joint ensuite en une chaîne avecstr.join
. Ensuite, il utilise l'%
opérateur de mise en forme de chaîne pour remplacer la chaîne dans au lieu de%s
in"[%s]"
."[{0}]".format(", ".join(str(i) for i in mylist))
map(f, xs)
(ouimap
en python2.x) à(f(x) for x in xs)
, quandf
est un appelable prédéfini; qui a tendance à exécuter moins de bytecodes et est généralement plus compact. Certainement pasmap(lambda x:..., xs)
c'est bien pire que(... for x in xs)
C'est un code simple, donc si vous êtes nouveau, vous devriez le comprendre assez facilement.
Il les imprime tous sans guillemets, comme vous le vouliez.
la source
En utilisant uniquement l'impression:
la source
Si vous utilisez Python3:
la source
print(end='['); print(*l, sep=', ', end=']\n')
Au lieu d'utiliser
map
, je recommanderais d'utiliser une expression de générateur avec la capacité d'join
accepter un itérateur:Voici
join
une fonction membre de la classe stringstr
. Il prend un argument: une liste (ou itérateur) de chaînes, puis retourne une nouvelle chaîne avec tous les éléments concaténés par, dans ce cas,
,.la source
", ".join( str(x) for x in list_or_iterator).join('[]')
Vous pouvez supprimer tous les caractères indésirables d'une chaîne en utilisant sa
translate()
méthode avecNone
pour l'table
argument suivi d'une chaîne contenant le (s) caractère (s) que vous souhaitez supprimer pour sondeletechars
argument.Si vous utilisez une version de Python antérieure à la 2.6, vous devrez utiliser la fonction
string
du module à latranslate()
place car la possibilité de passer enNone
tanttable
qu'argument n'a été ajoutée qu'à partir de Python 2.6. Son utilisation ressemble à ceci:L'utilisation de la
string.translate()
fonction fonctionnera également dans 2.6+, donc son utilisation pourrait être préférable.la source
lst = ["it isn't", 3, 'b']
==>["it isnt", 3, b]
et aussi aveclst = ['it isn\'t', 3, 'b']
Voici une session interactive montrant certaines des étapes du one-liner de @ TokenMacGuy. Il utilise d'abord la
map
fonction pour convertir chaque élément de la liste en une chaîne (en fait, il crée une nouvelle liste, ne convertit pas les éléments de l'ancienne liste). Ensuite, il utilise la méthode stringjoin
pour combiner ces chaînes avec', '
entre elles. Le reste n'est que du formatage de chaîne, ce qui est assez simple. (Modifier: cette instance est simple; le formatage des chaînes en général peut être quelque peu complexe.)Notez que l'utilisation
join
est un moyen simple et efficace de créer une chaîne à partir de plusieurs sous-chaînes, beaucoup plus efficace que de le faire en ajoutant successivement des chaînes aux chaînes, ce qui implique beaucoup de copie en arrière-plan.la source
Utilisation
.format
pour le formatage de chaîne,Production:
Explication:
map
est utilisé pour mapper chaque élément de la liste àstring
taper.,
comme séparateur.[
et]
dans l'instruction print pour afficher les accolades de la liste.Référence:
.format
pour le formatage des chaînes PEP-3101la source
.format
la manière la plus pythonique. Mais, bien sûr, j'accepte les désaccords. ;)J'ai été inspiré par @AniMenon pour écrire une solution pythonique plus générale.
Il n'utilise que la
format
méthode. Aucune trace destr
, et il permet un réglage fin du format des éléments. Par exemple, si vous avez des nombres flottants comme éléments de la liste, vous pouvez ajuster leur format, en ajoutant un spécificateur de conversion, dans ce cas:.2f
La sortie est assez correcte:
la source