Quelle serait votre façon préférée de concaténer des chaînes d'une séquence de telle sorte qu'entre deux paires consécutives, une virgule soit ajoutée. Autrement dit, comment mappez-vous, par exemple, ['a', 'b', 'c']
à 'a,b,c'
? (Les cas ['s']
et []
doivent être mappés respectivement à 's'
et ''
.)
Je finis généralement par utiliser quelque chose comme ''.join(map(lambda x: x+',',l))[:-1]
, mais je me sens aussi quelque peu insatisfait.
Pourquoi la
map
/lambda
magie? Ça ne marche pas?Si la liste contient des nombres, vous pouvez utiliser la compréhension de la liste:
ou une expression de générateur:
la source
",".join(l)
ne fonctionnera pas dans tous les cas. Je suggère d'utiliser le module csv avec StringIOla source
StringIO
en a pas dans Python 3from io import StringIO
in Python 3Voici une solution alternative en Python 3.0 qui permet des éléments de liste non-chaîne:
une manière standard
la solution alternative
REMARQUE: l'espace après une virgule est intentionnel.
la source
Ne voulez-vous pas simplement:
Évidemment, cela devient plus compliqué si vous devez citer / échapper des virgules, etc. dans les valeurs. Dans ce cas, je suggère de regarder le module csv dans la bibliothèque standard:
https://docs.python.org/library/csv.html
la source
@Peter Hoffmann
L'utilisation d'expressions de générateur a également l'avantage de produire un itérateur, mais économise l'importation d'itertools. De plus, les compréhensions de liste sont généralement préférées à mapper, donc je m'attends à ce que les expressions de générateur soient préférées à imap.
la source
my_list
peut contenir tout type de variables. Cela évite le résultat'A,,,D,E'
.la source
la source
@ jmanning2k utilisant une compréhension de liste a l'inconvénient de créer une nouvelle liste temporaire. La meilleure solution serait d'utiliser itertools.imap qui retourne un itérateur
la source
str.join
travail plus rapidement parlist
rapport au générateurVoici un exemple avec liste
Plus précise:-
Exemple 2: -
la source
Je dirais
csv
bibliothèque est la seule option raisonnable ici, car elle a été conçue pour faire face à tous les cas d'utilisation csv tels que les virgules dans une chaîne, etc.Pour sortir une liste
l
dans un fichier .csv:Il est également possible d'utiliser
writer.writerows(iterable)
pour sortir plusieurs lignes vers csv.Cet exemple est compatible avec Python 3, car l'autre réponse utilisée ici
StringIO
est Python 2.la source
À moins que je manque quelque chose,
','.join(foo)
je dois faire ce que vous demandez.(modifier: et comme le souligne jmanning2k,
est plus sûr et assez Pythonique, bien que la chaîne résultante soit difficile à analyser si les éléments peuvent contenir des virgules - à ce stade, vous avez besoin de la pleine puissance du
csv
module, comme Douglas le souligne dans sa réponse.)la source
Mes deux centimes. J'aime plus simple un code d'une ligne en python:
C'est pythonique, fonctionne pour les chaînes, les nombres, Aucun et la chaîne vide. Il est court et répond aux exigences. Si la liste ne contient pas de nombres, nous pouvons utiliser cette variante plus simple:
De plus, cette solution ne crée pas de nouvelle liste, mais utilise un itérateur, comme l'a souligné @Peter Hoffmann (merci).
la source