2011-05-13 14 views
7

Dada una cadena de Python como esto:Python - convierten una cadena separada por comas en la reducción de lista de cadenas

location_in = 'London, Greater London, England, United Kingdom' 

me gustaría convertirlo en una lista como esta:

location_out = ['London, Greater London, England, United Kingdom', 
       'Greater London, England, United Kingdom', 
       'England, United Kingdom', 
       'United Kingdom'] 

En otras palabras, dada una cadena separada por comas (location_in), me gustaría copiarlo a una lista (location_out) y gradualmente descomponerlo eliminando la primera palabra/frase cada vez.

Soy un novato de Python. ¿Alguna idea sobre una buena forma de escribir esto? Gracias.

+0

Uh .. No es 'locato n_out' solo '[location_in]'? Debes aclarar más. – Pwnna

+4

no. No sé lo que estás haciendo pero este probablemente sea el enfoque equivocado. –

+0

Algunas excelentes respuestas a continuación. ¡Gracias a todos por su ayuda! – Federico

Respuesta

24
location_in = 'London, Greater London, England, United Kingdom' 
locations = location_in.split(', ') 
location_out = [', '.join(locations[n:]) for n in range(len(locations))] 
1

montón de maneras de hacer esto, pero aquí está uno:

def splot(data): 
    while True: 
    yield data 
    pre,sep,data=data.partition(', ') 
    if not sep: # no more parts 
     return 

location_in = 'London, Greater London, England, United Kingdom' 
location_out = list(splot(location_in)) 

Una solución más perversa:

def stringsplot(data): 
    start=-2    # because the separator is 2 characters 
    while start!=-1:  # while find did find 
    start+=2    # skip the separator 
    yield data[start:] 
    start=data.find(', ',start) 
+0

+1 para no dividir 'location_in'. – 9000

1

He aquí un trabajo uno:

location_in = 'London, Greater London, England, United Kingdom' 
loci = location_is.spilt(', ') # ['London', 'Greater London',..] 
location_out = [] 
while loci: 
    location_out.append(", ".join(loci)) 
    loci = loci[1:] # cut off the first element 
# done 
print location_out 
0
>>> location_in = 'London, Greater London, England, United Kingdom' 
>>> location_out = [] 
>>> loc_l = location_in.split(", ") 
>>> while loc_l: 
...  location_out.append(", ".join(loc_l)) 
...  del loc_l[0] 
... 
>>> location_out 
['London, Greater London, England, United Kingdom', 
'Greater London, England, United Kingdom', 
'England, United Kingdom', 
'United Kingdom'] 
>>> 
Cuestiones relacionadas