2013-07-28 8 views
-1

파이썬에서는 사용자에게 문자열을 묻는 프로그램을 작성한 다음 p, q, r, s, t (대문자와 소문자)를 모두 제거합니다.) 그런 다음 다른 모든 것을 인쇄하십시오. Today it is Tuesday 입력의 경우 oday i i ueday을 인쇄해야합니다.문자열에서 특정 문자 제거

코드를 작성했지만 필요한 경우 마지막 문자는 제거하지 않습니다. 여기 내가 작성한 것입니다 :

S = str(input("Please enter some text: ")) 
L = list(S) 
for i in L : 
    if i in 'tsrqpPQRST' : 
     L.remove(i) 
string = "" 
for char in L : 
    string = string + char 
print(string) 

답변

1

당신은 str.translate을 사용할 수 있습니다.

>>> test = 'Today it is Tuesday' 
>>> removeText = 'pqrst' 
>>> test.translate(None, removeText+removeText.upper()) 
'oday i i ueday' 

파이썬 3에있어 이후

,이 같은 translate() 방법을 사용합니다.

>>> test = 'Today it is Tuesday' 
>>> removeText = 'pqrst' 
>>> test.translate(dict.fromkeys(ord(elem) for elem in removeText+removeText.upper())) 
'oday i i ueday' 

코드의 문제는 반복되는 동안 목록에서 물건을 제거한다는 것입니다.

이렇게하면됩니다.

>>> testList = list(test) 
>>> for i in testList[:]: 
     if i in 'pqrstPQRST': 
      testList.remove(i) 


>>> "".join(testList) 
'oday i i ueday' 

P.S을 (원본 목록에서 요소를 제거하는 동안 여기, 그것을 반복, 복사본을 만들) - 대신 string = ''를 사용하고 목록 반복과 문자를 결합의 단지 "".join(...)를 사용합니다.

0

이렇게하는 방법에는 여러 가지가 있습니다. 예 : 보조 노트로

>>> s = "helllo" 
>>> s.replace("l","") 
'heo' 
>>> s.translate(None,"le") 
'ho' 
>>> 

, 당신은 그것을 반복하는리스트로 문자열을 설정하지 않아도 하지만 당신이 그것을 반복 할 때 당신이 원하는, 그래서 만약 당신이, 반복 가능을 수정해서는 안

>>> s 
'helllo' 
>>> m = "" 
>>> for i in s: 
     if i not in "el": #put the list of characters here 
       m += i 


>>> m 
'ho' 
>>> 

당신이 문자열의 복사본을 만들고있는이 방법, 당신은 문제가 실행되지 않습니다 당신이 반복 동안 그것을 수정할 때 당신은 : 코드를 향상이의 라인을 따라 뭔가 될 것입니다.

1

당신은 정규 표현식을 사용할 수 있습니다 : 당신은 joingenerator expression을 결합 할 수 있습니다

import re 
new_string = re.sub('(?i)[pqrst]', '', S) 
+0

+1 - Regex은이 문제를 쉽고 빠르게 해결합니다. 그러나're.sub ('(? i) [p-t]', '', S)'를 더 잘 만들 수 있습니다. 이것은 "pqrst"가 알파벳 순서대로 있기 때문에 효과가 있습니다. – iCodez

1

. 루프 및 문자열 연결을 위해 결합하면 효율적이지 않습니다 또는 pythonic. 또한 문자열 자체는 반복 가능하므로 목록으로 변환 할 필요가 없습니다.

>>> s = 'Today it is Tuesday' 
>>> ''.join(x for x in s if x not in 'pqrstPQRST') 
'oday i i ueday' 
>>> 
+0

[str.join과 함께 을 사용하면 아무런 이점이 없습니다.] (http://stackoverflow.com/a/9061024/846892) LC보다 읽기 쉽습니다. –

+0

감사합니다. 이것은 저에게 두 가지에 대한 새로운 이해를 제공합니다. 하지만 이제는 for 루프에서 GC가 더 빠른 이유에 대해 궁금합니다. – zhangyangyu

+0

[데이터에 따라 다릅니다.] (http://stackoverflow.com/a/11964301/846892), 작거나 평균 크기의 루프 LC는 빠릅니다. –