2012-09-12 24 views
5

Estoy ansioso por ver si su es un poco de magia pitón Puede que no sepa de lograr un poco de frivolidadPython: Split, tira, y se unen en una sola línea

dada la línea:

csvData.append(','.join([line.split(":").strip() for x in L])) 

I 'm intentar dividir una línea en :, recortar el espacio en blanco alrededor de ella, y unirse en ,

problema es, ya que la matriz se volvió de line.split(":"), la

for x in L #<== L doesn't exist! 

causa problemas ya que no tengo nombre para la matriz devuelta por line.split(":")

Así que estoy ansioso por ver si hay una pieza atractiva de la sintaxis que podría utilizar para lograr esto en una sola toma?

¡Salud!

+0

franja fija de banda() – PandemoniumSyndicate

Respuesta

18
>>> line = 'a: b :c:d:e :f:gh ' 
>>> ','.join(x.strip() for x in line.split(':')) 
'a,b,c,d,e,f,gh' 

También puede hacer esto:

>>> line.replace(':',',').replace(' ','') 
'a,b,c,d,e,f,gh' 
+0

Esa segunda respuesta, infierno sí – PandemoniumSyndicate

+0

+1 para 'replace()'. :) –

+4

En realidad prefiero la primera respuesta, ya que la segunda es menos robusta a lo que es el espacio en blanco. – DSM

0

Algo así como ?:

>>> L = "1:2:3:4" 
>>> result = ",".join([item.strip() for item in L.split(":")]) 
>>> result 
'1,2,3,4' 

Se toma un tiempo para conseguir un asimiento en las listas por comprensión. Básicamente son bucles empaquetados cuando los descomponen.

Por lo tanto, al aprender, intente descomponerlo como un bucle normal, y luego traducirlo a una lista de comprensión.

En su ejemplo, no asigna la variable line a ninguna parte, por lo que sería un error incluso en un ciclo estándar.

>>> for x in L: 
...  items = line.split(":") 
... 
Traceback (most recent call last): 
    File "<stdin>", line 2, in <module> 
NameError: name 'line' is not defined 
>>> 
+1

No hay necesidad de construir una lista en la mitad –

+0

Sí, cierto, pero para un principiante puede ser confuso por qué eso funciona. – monkut

0

Dada una cadena S:

','.join([x.strip() for x in s.split(':')]) 
+2

no hay necesidad de comprensión de lista aquí, solo '','. join (x.strip() para x en s.split (':')) '. –

+0

Es cierto, aunque la comprensión de la lista puede aclarar parte de la solución. – arturhoo