[PYTHON] 어떻게 파이썬에서 문자열에있는 모든 문자의 인스턴스를 삭제하려면?
PYTHON어떻게 파이썬에서 문자열에있는 모든 문자의 인스턴스를 삭제하려면?
이 문자열에서 문자의 모든 인스턴스를 어떻게 삭제합니까? 여기 내 코드가 있습니다 :
def findreplace(char, string):
place = string.index(char)
string[place] = ''
return string
그러나 이것을 실행하면 다음과 같이됩니다.
>>> findreplace('i', 'it is icy')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 3, in findreplace
TypeError: 'str' object does not support item assignment
왜 이런거야?
해결법
-
==============================
1.문자열은 파이썬에서 불변합니다. 문자열이 생성되면 문자열의 내용을 변경할 수 없습니다. 전혀 변경하지 않으면 변경된 문자열의 새 인스턴스가 만들어집니다.
문자열은 파이썬에서 불변합니다. 문자열이 생성되면 문자열의 내용을 변경할 수 없습니다. 전혀 변경하지 않으면 변경된 문자열의 새 인스턴스가 만들어집니다.
이를 염두에두고 우리는 이것을 해결할 수있는 많은 방법을 가지고 있습니다.
타이밍 비교
def findreplace(m_string, char): m_string = list(m_string) for k in m_string: if k == char: del(m_string[m_string.index(k)]) return "".join(m_string) def replace(m_string, char): return m_string.replace("i", "") def translate(m_string, char): return m_string.translate(None, "i") from timeit import timeit print timeit("findreplace('it is icy','i')", "from __main__ import findreplace") print timeit("replace('it is icy','i')", "from __main__ import replace") print timeit("translate('it is icy','i')", "from __main__ import translate")
결과
1.64474582672 0.29278588295 0.311302900314
str.replace 및 str.translate 메소드는 허용되는 응답보다 8 배 및 5 배 빠릅니다.
주 : 이해력 메서드와 필터 메서드는 목록을 작성해야하므로 문자열을 구성하기 위해 다시 탐색해야하므로이 경우 느려질 것으로 예상됩니다. 그리고 re는 단일 캐릭터 교체를위한 약간의 잔인한 행동입니다. 따라서 이들 모두는 타이밍 비교에서 제외됩니다.
-
==============================
2.str.replace ()를 시도하십시오.
str.replace ()를 시도하십시오.
str="it is icy" print str.replace("i", "")
-
==============================
3.
>>> x = 'it is icy'.replace('i', '', 1) >>> x 't is icy'
귀하의 코드는 첫 번째 인스턴스를 대체하기 때문에, 나는 그것이 당신이 원하는 것이라고 생각했습니다. 모두 바꾸려면 1 개의 인수를 사용하지 마십시오.
문자열 자체의 문자는 바꿀 수 없으므로 변수에 다시 할당해야합니다. 기본적으로 문자열을 수정하는 대신 참조를 업데이트해야합니다.
-
==============================
4.replace () 메서드가이를 위해 작동합니다. 문자열에서 문자를 제거하는 데 도움이되는 코드는 다음과 같습니다. 의 말을하자
replace () 메서드가이를 위해 작동합니다. 문자열에서 문자를 제거하는 데 도움이되는 코드는 다음과 같습니다. 의 말을하자
j_word = 'Stringtoremove' word = 'String' for letter in word: if j_word.find(letter) == -1: continue else: # remove matched character j_word = j_word.replace(letter, '', 1) #Output j_word = "toremove"
-
==============================
5.나는 분할을 제안한다. (다른 대답은 유효하지 않다는 것을 말하는 것이 아니라, 이것은 다른 방법이다.)
나는 분할을 제안한다. (다른 대답은 유효하지 않다는 것을 말하는 것이 아니라, 이것은 다른 방법이다.)
def findreplace(char, string): return ''.join(string.split(char))
문자로 분할하면 모든 문자가 제거되고 목록으로 바뀝니다. 그런 다음 join 함수를 사용하여 목록에 참여합니다. 아래 ipython 콘솔 테스트를 볼 수 있습니다.
In[112]: findreplace('i', 'it is icy') Out[112]: 't s cy'
그리고 속도 ...
In[114]: timeit("findreplace('it is icy','i')", "from __main__ import findreplace") Out[114]: 0.9927914671134204
바꾸거나 번역 할만큼 빠르지 만 괜찮습니다.
-
==============================
6.
# s1 == source string # char == find this character # repl == replace with this character def findreplace(s1, char, repl): s1 = s1.replace(char, repl) return s1 # find each 'i' in the string and replace with a 'u' print findreplace('it is icy', 'i', 'u') # output ''' ut us ucy '''
from https://stackoverflow.com/questions/22187233/how-to-delete-all-instances-of-a-character-in-a-string-in-python by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 파이썬 : smtplib 모듈을 사용하여 전자 메일을 보낼 때 "제목"이 표시되지 않음 (0) | 2018.11.04 |
---|---|
[PYTHON] 장고 관리자에서 기본 응용 프로그램을 제거하십시오 (0) | 2018.11.04 |
[PYTHON] 파이썬은리스트의 첫번째와 마지막 요소를 조각 낸다. (0) | 2018.11.04 |
[PYTHON] python zipfile 모듈이 내 파일을 압축하지 않는 것 같습니다. (0) | 2018.11.04 |
[PYTHON] Windows 10의 작업 스케줄러에서 .py 파일 예약 (0) | 2018.11.04 |