2012-09-12 5 views
5

Sono curioso di sapere se il loro è un po 'di magia python non posso sapere per realizzare un po' di frivolezzaPython: Split, la striscia, e unirsi in una linea

dato la linea:

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

I 'm cercando di dividere una linea sul :, tagliare gli spazi bianchi intorno ad esso, e di unirsi a ,

problema è, dal momento che l'array viene restituito dal line.split(":"), il

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

provoca problemi dal momento che non ho alcun nome per la matrice restituita da line.split(":")

Quindi sono curioso di sapere se c'è un pezzo sexy della sintassi ho potuto utilizzare per raggiungere questo obiettivo in un colpo solo?

Cheers!

+0

striscia fissa a strip() – PandemoniumSyndicate

risposta

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

Si può anche fare questo:

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

Questa seconda risposta, l'inferno sì – PandemoniumSyndicate

+0

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

+4

In realtà preferisco la prima risposta, in quanto la seconda è meno robusta rispetto agli spazi bianchi. – DSM

0

Qualcosa di simile ?:

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

Ci vuole un po 'per ottenere una comprensione su list comprehension. Sono fondamentalmente solo loop impacchettati quando li abbattono.

Quindi, quando si apprende, provare a scomposizione come un normale ciclo e quindi tradurlo in una comprensione di lista.

Nell'esempio non viene assegnata la variabile line da nessuna parte, quindi sarebbe un errore anche in un ciclo standard.

>>> 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

Non c'è bisogno di costruire una lista in mezzo –

+0

Sì, è vero, ma per un principiante potrebbe essere difficile capire perché funzioni. – monkut

0

Data una stringa di S:

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

non c'è bisogno di comprensione delle liste qui, solo '', '. join (x.strip() per x in s.split (':')) '. –

+0

È vero, sebbene la comprensione dell'elenco possa chiarire parte della soluzione. – arturhoo