2015-06-12 19 views
7

Mam ciąg znaków, który wygląda tak:Jak rozwinąć ciąg znaków w ciągu znaków w pythonie?

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

Chcę rozwinąć yyy*a*b*c część tak, że ciąg wygląda następująco:

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

I rzeczywiście mają duży plik z separatora pomiędzy te struny. Mam analizowany plik do słownika, który wygląda tak:

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

I muszę mieć to yyy*a*b*c i xxx*d*e*f część zastąpić dodatkowych elementów na liście.

Jak mogę to zrobić w pythonie 3? Czy powinienem rozwinąć wszystko w łańcuchu, zanim sparsuję go do słownika lub po tym, jak parsuję go w słowniku (i jak)?

Odpowiedz

1

Można to zrobić za pomocą Split i prosta lista ze zrozumieniem:

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

Należy to robić podczas analizowania danych z pliku, po prostu przejść każdy z argumentów za pośrednictwem tej funkcji podczas dodawania do listy, dodając do odpowiedź @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 odbędzie się w liście, jak:

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

i zwróć pełną listę z poprawnymi pojęciami rozwiniętymi:

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 
Powiązane problemy