2011-09-01 10 views
3

나는 첫 번째 .replace 공백의 전체 문자열을 제거 할 것파이썬 잘못

(예, 나는 그것의 부분이 중복 알고)하는 방법

def strip_searchname(self, original_name): 
    taboo = {" and ", " of ", " at ", " in ", ":", "-", ",", " the ", " "} 
    searchname = original_name 
    for word in taboo: 
     print(searchname) 
     searchname = searchname.replace(word, "") 
    searchname = re.sub('[^a-zA-Z]', "", searchname) 
    searchname= searchname.upper() 
    return searchname 

이 나는 그것을 원하지 않는다. 왜 이런거야? 어떻게 피할 수 있습니까?

(예를 들어, 출력은 다음

Seattle University 
SeattleUniversity 
SeattleUniversity 
SeattleUniversity 
SeattleUniversity 
SeattleUniversity 
SeattleUniversity 
SeattleUniversity 
SeattleUniversity 
SEATTLEUNIVERSITY 

) 캐릭터 번째 인수 첫번째 인수 모두 OCCURENCES 대체에

+1

은 ""교체를 참조하십시오. 질문이 뭐야? –

+0

예,하지만 마지막 대체품입니다. 예제 출력에서 ​​볼 수 있듯이, 최초의 공백을 모두 지우는 것입니다. 즉, "and" – Colleen

+0

"예제 출력에서 ​​볼 수 있듯이"죄송합니다. 그것을 볼 수 없습니다. ''와''(그리고 오직 그것만이) 깨 졌다는 것을 증명하는 좀 더 명확한 예제를 제공 할 수 있습니까? 아마도 코드의 하위 집합일까요? –

답변

10

은 실행 것으로 보인다 이유입니다 "목록에있는 공간이 앞에 오는 "의 대체 "할 때, 예를 들어, 교체"의 " 는 전에 교체".

목록이 아닙니다.

taboo = {" and ", " of ", " at ", " in ", ":", "-", ",", " the ", " "} 

은 세트 리터럴입니다. 원하는 주문을 받으려면 {및}을 (와) 바꾸십시오.

+0

있습니다. 고맙습니다! (아직 파이썬 문법에 익숙해 져있다.) – Colleen

0

하는 방법을 대체. 루프에서 word 문자열이 " "이면 replace 메서드는 " "의 모든 항목을 searchname에 삭제합니다. 이해가 안 무엇

+0

그 점을 이해합니다. 필자가 이해하지 못하는 것은 "of"대체가 "예"와 같이 "of"가 바뀌기 전에 바꿉니다. – Colleen

+0

아마 루프가 예상 한 순서대로 수행되지 않습니다. 디버그 명령문에서'단어'와'searchname'을 출력 해보십시오. – asf107

+0

당신이 세트를 반복하기 때문에 이런 일이 일어납니다. 삭제해야하는 금기 문자열의 순서가 중요한 경우 집합을 사용하지 말고 목록이나 튜플과 같은 것을 사용해야합니다. 즉, 순서가 고려되는 데이터 형식입니다. – etuardu

0

아마도 문제는 taboo은 목록이 아니며, 그것은 세트이며 주문을 유지하지 않는다는 것입니다.

명확하게 모든 공백을 대체 할 taboo``의 끝에서

>>> taboo = ['a', 'b', ' '] 
>>> print taboo 
['a', 'b', ' '] 
>>> taboo = {'a', 'b', ' '} 
>>> print taboo 
set(['a', ' ', 'b']) 
+0

그게 집합이 아닌, 딕트이다. (개정 : 개정) – habnabit