149 votes

Rejoignez une liste de chaînes en python et enveloppez chaque chaîne entre guillemets

J'ai:

words = ['hello', 'world', 'you', 'look', 'nice']

Je veux avoir:

'"hello", "world", "you", "look", "nice"'

Quel est le moyen le plus simple de le faire avec Python?

318voto

jamylak Points 38094

Mise à jour 2021: Avec les f strings en Python3

>>> words = ['hello', 'world', 'you', 'look', 'nice']
>>> ', '.join(f'"{w}"' for w in words)
'"hello", "world", "you", "look", "nice"'

Réponse originale (Prise en charge de Python 2.6+)

>>> words = ['hello', 'world', 'you', 'look', 'nice']
>>> ', '.join('"{0}"'.format(w) for w in words)
'"hello", "world", "you", "look", "nice"'

79voto

Thykof Points 760

Vous pouvez essayer ceci :

str(mots)[1:-1]

58voto

mrchlblng Points 637

Vous pouvez également effectuer un seul appel format

>>> mots = ['bonjour', 'monde', 'tu', 'as', 'l\'air']
>>> '"{0}"'.format('", "'.join(mots))
'"bonjour", "monde", "tu", "as", "l\'air"'

Mise à jour: quelques tests de performance (effectués sur un mbp de 2009):

>>> timeit.Timer("""mots = ['bonjour', 'monde', 'tu', 'as', 'l\'air'] * 100; ', '.join('"{0}"'.format(w) for w in mots)""").timeit(1000)
0.32559704780578613

>>> timeit.Timer("""mots = ['bonjour', 'monde', 'tu', 'as', 'l\'air'] * 100; '"{}"'.format('", "'.join(mots))""").timeit(1000)
0.018904924392700195

Il semble donc que format soit en fait assez coûteux

Mise à jour 2: suite au commentaire de @JCode, ajout d'un map pour s'assurer que join fonctionnera, Python 2.7.12

>>> timeit.Timer("""mots = ['bonjour', 'monde', 'tu', 'as', 'l\'air'] * 100; ', '.join('"{0}"'.format(w) for w in mots)""").timeit(1000)
0.08646488189697266

>>> timeit.Timer("""mots = ['bonjour', 'monde', 'tu', 'as', 'l\'air'] * 100; '"{}"'.format('", "'.join(map(str, mots)))""").timeit(1000)
0.04855608940124512

>>> timeit.Timer("""mots = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] * 100; ', '.join('"{0}"'.format(w) for w in mots)""").timeit(1000)
0.17348504066467285

>>> timeit.Timer("""mots = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] * 100; '"{}"'.format('", "'.join(map(str, mots)))""").timeit(1000)
0.06372308731079102

9voto

Emmett J. Butler Points 1629
>>> ', '.join(['"%s"' % w for w in words])

7voto

Gruber Points 361

Une version mise à jour de la réponse de @jamylak avec F Strings (pour python 3.6+), j'ai utilisé des apostrophes inversées pour une chaîne utilisée pour un script SQL.

keys = ['foo', 'bar' , 'omg']
', '.join(f'`{k}`' for k in keys)
# résultat: '`foo`, `bar`, `omg`'

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X