2015-06-12 16 views
7

Ho una stringa che assomiglia a questo:Come espandere una stringa all'interno di una stringa in python?

1 | xxx | xxx | xxx | yyy*a*b*c | xxx 

voglio espandere la parte yyy*a*b*c modo che la stringa simile a questo:

1 | xxx | xxx | xxx | yyya | yyyb | yyyc | xxx 

Mi hanno fatto un grande file con un delimitatore tra queste corde. Ho analizzato il file in un dizionario che assomiglia a questo:

{'1': ['xxx' , 'xxx', 'xxx', 'yyy*a*b*c', 'xxx' ], '2': ['xxx*d*e*f', ..., 'zzz'], etc} 

E ho bisogno di avere quel yyy*a*b*c e xxx*d*e*f parte sostituiti con altri elementi della lista.

Come posso farlo in python 3? Devo espandere tutto nella stringa prima di analizzarlo in un dizionario o dopo averlo analizzato in un dizionario (e come)?

risposta

1

È possibile farlo utilizzando scissione e semplice lista di comprensione:

def expand_input(input): 
    temp = input.split("*") 
    return [temp[0]+x for x in temp[1:]] 

print(expand_input("yyy*a*b*c")) 
>>> ['yyya', 'yyyb', 'yyyc'] 
1

Si dovrebbe fare è durante l'analisi dei dati dal file, basta passare ciascuno degli argomenti attraverso questa funzione, mentre l'aggiunta alla lista, aggiungendo al risposta @tuananh: -

def expand_input(input): 
    temp = input.split("*") 
    return [temp[0]+x for x in temp[1:]] if len(temp)>1 else input 
0

process prenderà in una lista come:

['xxx', 'xxx', 'yyy*a*b*c', 'xxx*d*e*f'] 

e restituire l'elenco completo con i termini corretti espansi:

def expand(s): 
    """ 
    expand('yyy*a*b*c') --> ['yyya', 'yyyb', 'yyyc'] 
    expand('xxx') --> ['xxx'] 
    """ 

    if "*" not in s: 
     return s 
    base, suffixes = s.split("*") 
    return [base + suffix for suffix in suffixes] 

def process(strings): 
    result = [] 
    for s in strings: 
     result.extend(s) 
    return result 
Problemi correlati