2013-06-26 4 views
0

새로운 "문자열 목록"을 만들어 두 단어를 결합하고자하는 문자열 목록이 있습니다. 그러나 일부 코드를 실행 한 후에는 내 가정에 따라 결과가 거의 없습니다. '123', 'BCR', 'EF', 'RTY', 'B', '123', 'VCR', 'EF', 'B', '123' 'RRR', 'EF', '를 더럽']문자열의 단어 합치기

코드

for k in range(0,len(text)): 
     a = [i for i,x in enumerate(text) if x == "EF"] 
     b = [i for i,x in enumerate(text) if x == "RTY"] 
     for l in range(0,len(a)): 
      for m in range(0,len(b)): 
       if a[l] == b[m] - 1 : 
        text[a[l]] = text[a[l]]+text[b[m]] 

는 "EF"를 볼 수있는 바와 같이 (지금까지) "를 더럽"전에 항상 그러나 안전 측면을 복용 난을 공제하고 색인 또는 위치. 어떤 단서.

답변이 질문에서 업데이트되었습니다.

+0

파이썬 문자열은 변경할 수 없습니다. 따라서 내부에서 수정할 수 없습니다. –

+1

예상되는 결과는 무엇입니까? 마지막에 '텍스트'의 내용은 무엇이되어야합니까? 그리고 @HunterMcMillen이 맞습니다. 문자열을 내부에서 돌연변환 할 수 없습니다. 파이썬에서는 불가능합니다. –

+0

'text'는 문자열이 아니며, 문자열 목록입니다. 문자열을 수정하려고합니까? 또는 문자열 목록? – Kevin

답변

1

문자열은 변수에 연결의 결과를 다시 할당해야합니다, 파이썬에서 불변 :

text[a[l]] = text[a[l]]+text[b[m]] 

출력 :

['A', '123', 'BCR', 'EFRTY', 'RTY', 'B', '123', 'VCR', 'EF', 'B', '123', 'RRR', 'EFRTY', 'RTY'] 
+0

감사합니다. Ashwini. 아주 가까이에 당신이 정말로 나를 인도했습니다. – LonelySoul

+0

@LonelySoul 기꺼이 도와주었습니다. :) –

2

모든 인접한 'EF', 'RTY' 비 중복 가입하려면 쌍의 목록 :

L = ['A','123','BCR','EF','RTY','B','123','VCR','EF','B','123','RRR','EF','RTY'] 

result = [] 
pairs = iter(zip(L, L[1:]+[''])) 
for a, b in pairs: 
    if a == 'EF' and b == 'RTY': # found adjacent 
     a += b # join 
     next(pairs, None) # skip the next a ('RTY') 
    result.append(a) 
L[:] = result # modify inplace 
# -> ['A','123','BCR','EFRTY','B','123','VCR','EF','B','123','RRR','EFRTY'] 

두 개 이상의 단어를 지원하려면

seq = ["EF", "RTY", "B"] 
pos = i = 0 
while i < len(L): 
    if L[i:i+len(seq)] == seq: 
     L[pos] = "".join(seq) 
     i += len(seq) 
    else: 
     L[pos] = L[i] 
     i += 1 
    pos += 1  
del L[pos:] 
+0

그게 정말 재미있는 솔루션 @ J.F.Sebastian. 그러나 하나 이상의 단어를 추가하려면 코드를 어떻게 바꿀 것입니까? – LonelySoul

+0

@LonelySoul : 두 단어 이상을 지원하는 코드를 추가했습니다. – jfs

+0

시퀀스가 ​​두 개 이상인 경우 pos를 "pos = i = 0"으로 재설정 할 수 있습니다. 누군가에게 도움이 될 수 있습니다. – LonelySoul