2015-02-01 4 views
0

알파벳을 나타내는 동시에 특정 값이있는 문자를 포함하는 목록과 비교하는 문자열 x을 반복하려고합니다.Python에서 문자열에서 문자를 제거 할 수 없습니다.

목록과 문자열이 모두 일치하는 경우 x 문자열의 특정 문자를 x에서 제거해야합니다. 이것은 매우 간단하고 간단한 코드입니다. 나는 .replace 메서드를 T에 따라갔습니다. 그러나 코드를 실행하면 x 문자열이 여전히 원래 상태로 나타납니다.

lettersGuessed = ['e', 'i', 'k', 'p', 'r', 's'] 

x = 'abcdefghijklmnopqrstuvwxyz' 

for i in range(len(x)): 
    if x[i] in lettersGuessed: 
     x.replace(x[i],'') 

print x "Available Letters" 
+0

범위에서 내가위한 '수행을 (len (x)) :'그리고'x [i]'는 파이썬에서 unidiomatic이다. 문자열을 직접 반복하면됩니다. for i in x :'. – iCodez

+0

linkfail XD @ user1415571 –

+0

['str.replace'] (https://docs.python.org/2/library/stdtypes.html#str.replace)에 대한 문서를보십시오. –

답변

1

단순 실수 :

여기 내 작업 코드입니다.

x = x.replace(x[i],'') 
+0

완벽한! 작동했습니다. – user40720

0
당신은 가입 사용할 수 있습니다

및 발전기 표현 :

print("Available Letters","".join(ch if ch not in lettersGuessed else "" for ch in x )) 

루프를 사용하여, 단지마다 X 사용 lettersGuessed 문자 및 업데이트를 반복 :

for ch in lettersGuessed: 
    x = x.replace(ch,'') # assign the updated string to x 


print("Available Letters",x) 

이상 반복 x는 동일한 논리입니다 :

for ch in x: 
    if ch in lettersGuessed: 
     x = x.replace(ch,'') 

문자열은 불변이고이므로 문자열을 바꿀 수 없습니다. 당신은 당신은 원래의 문자열로 변경된 값을 다시 할당하지 않는 다음

x = x.replace(x[i], '') 

을 시도 x.replace(ch,'')

In [1]: x = 'abcdefghijklmnopqrstuvwxyz'  
In [2]: id(x) 
Out[2]: 139933694754864  
In [3]: id(x.replace("a","foo")) # creates a new object 
Out[3]: 139933684264296 
In [7]: x 
Out[7]: 'abcdefghijklmnopqrstuvwxyz' # no change  
In [8]: id(x) 
Out[8]: 139933694754864 # still the same object 
3

로 만든 새 문자열로 X를 재 할당해야합니다.

+0

@Jawa 편집 해 주셔서 감사합니다. 나는 배우고있다. – radsine

0

당신이 달성하기 위해 파이썬 세트를 사용할 수 있습니다

a = ['a','b','d'] 
b = "abcdefgh" 
print ''.join(sorted(list(set(b) - set(a)))) 

출력 :

cefgh Available letters 

또는 사용 목록 함축이 달성하기 위해 :

a = ['a','b','d'] 
b = "abcdefgh" 
print ''.join([x for x in b if x not in a]) 
관련 문제