복붙노트

[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. ==============================

    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. ==============================

    2.str.replace ()를 시도하십시오.

    str.replace ()를 시도하십시오.

    str="it is icy"
    print str.replace("i", "")
    
  3. ==============================

    3.

    >>> x = 'it is icy'.replace('i', '', 1)
    >>> x
    't is icy'
    

    귀하의 코드는 첫 번째 인스턴스를 대체하기 때문에, 나는 그것이 당신이 원하는 것이라고 생각했습니다. 모두 바꾸려면 1 개의 인수를 사용하지 마십시오.

    문자열 자체의 문자는 바꿀 수 없으므로 변수에 다시 할당해야합니다. 기본적으로 문자열을 수정하는 대신 참조를 업데이트해야합니다.

  4. ==============================

    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. ==============================

    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. ==============================

    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 '''
    
  7. 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