파이썬을 사용하여 문자열에서 문자를 삭제하는 방법


457

예를 들어 문자열이 있습니다. EXAMPLE.

중간 문자를 제거하려면 어떻게 M해야합니까? 코드가 필요하지 않습니다. 나는 알고 싶다:

  • 파이썬의 문자열은 특별한 문자로 끝나나요?
  • 중간 문자부터 시작하여 새 문자열을 작성하고 중간 문자를 복사하지 않고 모든 것을 오른쪽에서 왼쪽으로 이동하는 것이 더 좋은 방법은 무엇입니까?

답변:


639

파이썬에서는 문자열을 변경할 수 없으므로 새 문자열을 만들어야합니다. 새 문자열을 만드는 방법에 대한 몇 가지 옵션이 있습니다. 어디에서나 'M'을 제거하려면 다음을 수행하십시오.

newstr = oldstr.replace("M", "")

중심 문자를 제거하려면 다음을 수행하십시오.

midlen = len(oldstr)/2   # //2 in python 3
newstr = oldstr[:midlen] + oldstr[midlen+1:]

문자열이 특수 문자로 끝나는 지 물었습니다. 아니요, C 프로그래머처럼 생각하고 있습니다. 파이썬에서는 문자열이 길이와 함께 저장되므로를 포함한 모든 바이트 값 \0이 문자열에 나타날 수 있습니다.


16
질문자가 파이썬에 익숙하지 않다는 것을 감안할 때, 버전 2.X 파이썬에서 "/"연산자는 정수 (0으로 잘림)를 반환하지만 버전 3.X 파이썬에서는 "//"를 사용해야한다는 점에 주목할 가치가 있습니다. 대신에. 또한 from __future__ import division스크립트 시작 부분의 줄 은 버전 2.X Python을 버전 3.X처럼 작동하게합니다
Michael Dunn

1
"M"이 행의 유일한 내용 인 경우 ""는 그 자리에 빈 행 뒤에 남습니다.
8bitjunkie

1
@ 7SpecialGems 그것은이 문자열로 무엇을하는지에 달려 있습니다. 빈 문자열 ""은 빈 줄을 의미하지 않습니다. 목록에 넣고 개행과 결합하면 빈 줄이 생길 것입니다.하지만 빈 문자열을 사용하지 않는 다른 장소가 많이 있습니다.
Ned Batchelder

68

이것은 아마도 가장 좋은 방법 일 것입니다 :

original = "EXAMPLE"
removed = original.replace("M", "")

문자 등을 바꾸는 것에 대해 걱정하지 마십시오. 대부분의 Python 코드는 훨씬 높은 수준의 추상화에서 발생합니다.


6
M고유하지 않을 수 있습니다. 이 경우 모든 Ms를 대체합니다 .
Lazer

14
네 맞습니다. n어커런스 만 바꾸려면을 사용하십시오 original.replace("M", "", n).
재귀

1
@ S.Lott 하나의 인스턴스 만 교체 할 수있는 솔루션 제공을 제안하기 위해이를 수사적이라고 생각했습니다
Dodgie

63

특정 위치를 바꾸려면 :

s = s[:pos] + s[(pos+1):]

특정 문자를 바꾸려면 :

s = s.replace('M','')

18
이것이 효과가있을 수 있지만, 첫 번째 부분에서 일어나는 일을 설명함으로써 귀하의 답변을 향상시킬 수 있다고 생각합니다. 하위 문자열 조작은 설명없이 파이썬 초보자에게 이해하기 쉽지 않기 때문입니다.
jloubert

따라서 s의 길이가 l입니다. 그런 다음 첫 번째 부분의 pos 제약 조건은이어야합니다 l-1 > pos >= 0.
Haoyu Chen

s [: pos]는 0에서 pos-1까지 하위 문자열을 가져오고 s [(pos + 1) :]은 pos + 1에서 끝까지 하위 문자열을 가져옵니다. 따라서 s에서 s [pos]를 제거합니다.
s.singh

교체하지 않고 떨어집니다. 위치 선택 방법으로 구분 된 두 가지 주요 사용 사례 모두에 대한 예를 제공하여 작업을 구별하는 것이 좋습니다.
Alexander Stohr

28

문자열은 변경할 수 없습니다. 그러나 목록을 변경할 수있는 목록으로 변환 한 다음 목록을 변경 한 후 목록을 다시 문자열로 변환 할 수 있습니다.

s = "this is a string"

l = list(s)  # convert to list

l[1] = ""    # "delete" letter h (the item actually still exists but is empty)
l[1:2] = []  # really delete letter h (the item is actually removed from the list)
del(l[1])    # another way to delete it

p = l.index("a")  # find position of the letter "a"
del(l[p])         # delete it

s = "".join(l)  # convert back to string

기존 문자열에서 원하는 문자를 제외한 모든 것을 가져 와서 다른 문자열처럼 새 문자열을 만들 수도 있습니다 .


4
왜 그 str.replace방법을 사용하지 않습니까?
alichaudry

12

중간 문자 (예 : M)를 제거하려면 어떻게해야합니까?

파이썬의 문자열은 변경할 수 없기 때문에 할 수 없습니다 .

파이썬의 문자열은 특별한 문자로 끝나나요?

아니요. 문자 목록과 비슷합니다. 리스트의 길이는 문자열의 길이를 정의하며 문자는 터미네이터로 작동하지 않습니다.

중간 문자부터 시작하여 새 문자열을 작성하고 중간 문자를 복사하지 않고 모든 것을 오른쪽에서 왼쪽으로 이동하는 것이 더 좋은 방법은 무엇입니까?

기존 문자열을 수정할 수 없으므로 중간 문자를 제외한 모든 문자열이 포함 된 새 문자열을 만들어야합니다.


11

translate()방법을 사용하십시오 :

>>> s = 'EXAMPLE'
>>> s.translate(None, 'M')
'EXAPLE'

3
방법이 변경되었습니다. 파이썬 3에 대한 문서를 참조하십시오 : translate () 이것은 다른 문자를 공백으로 바꿉니다 ( None제거하기 위해 작동하지 않는 것 같습니다).translate( str.maketrans("<>", " ") )
handle

1
사실, 워드 프로세서는 다른 문자를 제거 파이썬 3에서) (번역하는 두 가지 방법을 지정 str.maketrans( "", "", "<>")하고str.maketrans( {"<":None,">":None })
핸들

3
답변의 코드에 해당하는 것은 python3에서 다음과 같습니다.'EXAMPLE'.translate({ord("M"): None})
yoniLavi


6
card = random.choice(cards)
cardsLeft = cards.replace(card, '', 1)

문자열에서 한 문자를 제거하는 방법 : 다음은 문자열에 문자로 표시되는 카드 스택이있는 예입니다. 그중 하나가 그려집니다 (문자열에서 임의의 문자를 선택하는 random.choice () 함수의 임의 모듈 가져 오기). 새로운 문자열 cardsLeft는 문자열 함수 replace ()에 의해 주어진 나머지 카드를 보유하기 위해 만들어지며, 마지막 매개 변수는 하나의 "카드"만 빈 문자열로 대체됨을 나타냅니다.


6
def kill_char(string, n): # n = position of which character you want to remove
    begin = string[:n]    # from beginning to n (n not included)
    end = string[n+1:]    # n+1 through end of string
    return begin + end
print kill_char("EXAMPLE", 3)  # "M" removed

나는 여기 어딘가에 이것을 보았다 .


4

"M"을 분리하기 위해 수행 한 작업은 다음과 같습니다.

s = 'EXAMPLE'
s1 = s[:s.index('M')] + s[s.index('M')+1:]

2
이것은이 특정 문자열에서만 작동하며 일반적인 해결책은 아닙니다.
Andreas Bergström

3

문자열에서 문자를 삭제 / 무시하려는 경우 (예 :이 문자열이있는 경우)

"[11 : L : 0]"

웹 API 응답 또는 CSV 파일과 같은 것에서 요청을 사용한다고 가정 해 봅시다.

import requests
udid = 123456
url = 'http://webservices.yourserver.com/action/id-' + udid
s = requests.Session()
s.verify = False
resp = s.get(url, stream=True)
content = resp.content

루프하고 원하지 않는 문자를 제거하십시오.

for line in resp.iter_lines():
  line = line.replace("[", "")
  line = line.replace("]", "")
  line = line.replace('"', "")

선택적 분할, 값을 개별적으로 읽을 수 있습니다.

listofvalues = line.split(':')

이제 각 값에 쉽게 액세스 할 수 있습니다.

print listofvalues[0]
print listofvalues[1]
print listofvalues[2]

이것은 인쇄됩니다

11

0


3

한 번char 또는 한 sub-string 삭제하려면 (첫 번째 항목 만) :

main_string = main_string.replace(sub_str, replace_with, 1)

참고 : 여기 에서 교체하려는 횟수만큼 1교체 할 수 있습니다 int.


3

리스트 이해를 간단하게 사용할 수 있습니다.

문자열이 있고 my name ischaracter를 제거 한다고 가정하십시오 m. 다음 코드를 사용하십시오.

"".join([x for x in "my name is" if x is not 'm'])

0
from random import randint


def shuffle_word(word):
    newWord=""
    for i in range(0,len(word)):
        pos=randint(0,len(word)-1)
        newWord += word[pos]
        word = word[:pos]+word[pos+1:]
    return newWord

word = "Sarajevo"
print(shuffle_word(word))

2
이 코드 스 니펫은 문제를 해결할 수 있지만 설명을 포함하면 게시물의 품질을 향상시키는 데 실제로 도움이됩니다. 앞으로 독자에게 질문에 대한 답변을 제공하고 있으며 해당 사람들이 귀하의 코드 제안 이유를 모를 수도 있습니다.
andreas

0

다른 방법은 함수를 사용하는 것입니다.

다음은 함수를 호출하여 문자열에서 모든 모음을 제거하는 방법입니다

def disemvowel(s):
    return s.translate(None, "aeiouAEIOU")

-7

파이썬에서는 문자열을 변경할 수 없으므로 두 옵션 모두 기본적으로 동일한 것을 의미합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.