¿Cuál sería su forma preferida de concatenar cadenas de una secuencia de manera que entre cada dos pares consecutivos se agregue una coma? Es decir, ¿cómo se asigna, por ejemplo, ['a', 'b', 'c']
a 'a,b,c'
? (Los casos ['s']
y []
deben asignarse a 's'
y ''
, respectivamente.)
Por lo general, termino usando algo como ''.join(map(lambda x: x+',',l))[:-1]
, pero también me siento algo insatisfecho.
¿Por qué la
map
/lambda
magia? ¿Esto no funciona?En caso de que haya números en la lista, puede usar la comprensión de la lista:
o una expresión generadora:
fuente
",".join(l)
no funcionará para todos los casos. Sugeriría usar el módulo csv con StringIOfuente
StringIO
en Python 3from io import StringIO
en Python 3Aquí hay una solución alternativa en Python 3.0 que permite elementos de lista sin cadenas:
una forma estándar
la solución alternativa
NOTA: El espacio después de la coma es intencional.
fuente
No solo quieres:
Obviamente, se vuelve más complicado si necesita citar / escapar comas, etc. en los valores. En ese caso, sugeriría mirar el módulo csv en la biblioteca estándar:
https://docs.python.org/library/csv.html
fuente
@Peter Hoffmann
El uso de expresiones generadoras tiene el beneficio de producir también un iterador pero ahorra la importación de herramientas iterativas. Además, las comprensiones de listas generalmente se prefieren al mapeo, por lo tanto, esperaría que las expresiones generadoras sean preferidas a imap.
fuente
my_list
puede contener cualquier tipo de variables. Esto evita el resultado'A,,,D,E'
.fuente
fuente
@ jmanning2k usando una lista de comprensión tiene la desventaja de crear una nueva lista temporal. La mejor solución sería usar itertools.imap que devuelve un iterador
fuente
str.join
trabajo más rápidolist
en comparación con el generadorAquí hay un ejemplo con la lista
Más preciso:-
Ejemplo 2: -
fuente
Diría que la
csv
biblioteca es la única opción sensata aquí, ya que se creó para hacer frente a todos los casos de uso de csv, como comas en una cadena, etc.Para enviar una lista
l
a un archivo .csv:También es posible usar
writer.writerows(iterable)
para generar múltiples filas en csv.Este ejemplo es compatible con Python 3, ya que la otra respuesta aquí utilizada
StringIO
es Python 2.fuente
A menos que me falte algo,
','.join(foo)
debería hacer lo que me pides.(editar: y como señala jmanning2k,
es más seguro y bastante pitónico, aunque la cadena resultante será difícil de analizar si los elementos pueden contener comas; en ese punto, necesita toda la potencia del
csv
módulo, como Douglas señala en su respuesta).fuente
Mis dos centavos. Me gusta más simple un código de una línea en python:
Es pitónico, funciona para cadenas, números, Ninguno y cadena vacía. Es corto y cumple los requisitos. Si la lista no va a contener números, podemos usar esta variación más simple:
Además, esta solución no crea una nueva lista, sino que usa un iterador, como señaló @Peter Hoffmann (gracias).
fuente