source

Python에서 문자열 집합에서 특정 하위 문자열을 제거하는 방법은 무엇입니까?

factcode 2022. 9. 29. 00:10
반응형

Python에서 문자열 집합에서 특정 하위 문자열을 제거하는 방법은 무엇입니까?

문자열 세트가 있고 모든 문자열에는 삭제할 특정 두 개의 하위 문자열 중 하나가 있습니다.

set1 = {'Apple.good', 'Orange.good', 'Pear.bad', 'Pear.good', 'Banana.bad', 'Potato.bad'}

나는 "를 원한다..good" 및 ".bad모든 문자열에서 서브스트링이 제거되었습니다.이거 해봤어요.

for x in set1:
    x.replace('.good', '')
    x.replace('.bad', '')

효과가 없는 것 같아요set1그대로 유지되는 거죠.나는 그것을 사용해봤어요.for x in list(set1)그렇다고 바뀌는 건 없어요

끈은 불변이다.str.replace 는 새로운 문자열을 만듭니다.이는 매뉴얼에 기재되어 있습니다.

str.replace(old, new[, count])

모든 하위 문자열이 새 하위 문자열로 대체된 문자열 복사본을 반환합니다. [...]

즉, 세트를 재할당하거나 재입력해야 합니다(세트 이해로 재할당이 용이합니다).

new_set = {x.replace('.good', '').replace('.bad', '') for x in set1}

P.S. 문자열의 접두사 또는 접미사를 변경하고 Python 3.9 이상을 사용하는 경우 또는 를 사용하십시오.

new_set = {x.removesuffix('.good').removesuffix('.bad') for x in set1}
>>> x = 'Pear.good'
>>> y = x.replace('.good','')
>>> y
'Pear'
>>> x
'Pear.good'

.replace는 문자열을 변경하지 않고 대체 문자열의 복사본을 반환합니다.문자열은 불변하기 때문에 직접 변경할 수 없습니다.

반환값은 다음 값에서 가져와야 합니다.x.replace새 세트로 옮겨놨어요.

Python 3.9+에서는, 다음의 방법으로 서픽스를 삭제할 수 있습니다.str.removesuffix('mysuffix'). 문서에서:

문자열이 접미사 문자열로 끝나고 접미사가 비어 있지 않으면 반환한다.string[:-len(suffix)]그렇지 않으면 원본 문자열 복사본을 반환합니다.

따라서 빈 세트를 새로 만들고 접미사를 붙이지 않고 각 요소를 추가할 수 있습니다.

set1  = {'Apple.good', 'Orange.good', 'Pear.bad', 'Pear.good', 'Banana.bad', 'Potato.bad'}

set2 = set()
for s in set1:
   set2.add(s.removesuffix(".good").removesuffix(".bad"))

또는 다음과 같이 집합 이해를 사용하여 새 집합을 작성합니다.

set2 = {s.removesuffix(".good").removesuffix(".bad") for s in set1}
   
print(set2)

출력:

{'Orange', 'Pear', 'Apple', 'Banana', 'Potato'}

흑마법만 있으면 돼!

>>> a = ["cherry.bad","pear.good", "apple.good"]
>>> a = list(map(lambda x: x.replace('.good','').replace('.bad',''),a))
>>> a
['cherry', 'pear', 'apple']

제거할 여러 개의 서브스트링이 있는 경우 한 가지 간단하고 효과적인 옵션은re.subregex OR을 사용하여 제거할 모든 서브스트링에 결합하는 컴파일 패턴(|)파이프

import re

to_remove = ['.good', '.bad']
strings = ['Apple.good','Orange.good','Pear.bad']

p = re.compile('|'.join(map(re.escape, to_remove))) # escape to handle metachars
[p.sub('', s) for s in strings]
# ['Apple', 'Orange', 'Pear']

다음과 같이 할 수 있습니다.

import re
import string
set1={'Apple.good','Orange.good','Pear.bad','Pear.good','Banana.bad','Potato.bad'}

for x in set1:
    x.replace('.good',' ')
    x.replace('.bad',' ')
    x = re.sub('\.good$', '', x)
    x = re.sub('\.bad$', '', x)
    print(x)
# practices 2
str = "Amin Is A Good Programmer"
new_set = str.replace('Good', '')
print(new_set)

 

print : Amin Is A  Programmer

테스트를 실시했는데(예시가 아닙니다) 데이터가 정상적으로 반환되지 않거나 완전히 반환되지 않습니다.

>>> ind = ['p5','p1','p8','p4','p2','p8']
>>> newind = {x.replace('p','') for x in ind}
>>> newind
{'1', '2', '8', '5', '4'}

나는 이것이 효과가 있다는 것을 증명했다.

>>> ind = ['p5','p1','p8','p4','p2','p8']
>>> newind = [x.replace('p','') for x in ind]
>>> newind
['5', '1', '8', '4', '2', '8']

또는

>>> newind = []
>>> ind = ['p5','p1','p8','p4','p2','p8']
>>> for x in ind:
...     newind.append(x.replace('p',''))
>>> newind
['5', '1', '8', '4', '2', '8']

If 리스트

문자열 집합인 목록에 대해 작업을 수행했는데 특정 하위 문자열이 있는 모든 행을 제거하려고 합니다. 이 작업을 수행할 수 있습니다.

import re
def RemoveInList(sub,LinSplitUnOr):
    indices = [i for i, x in enumerate(LinSplitUnOr) if re.search(sub, x)]
    A = [i for j, i in enumerate(LinSplitUnOr) if j not in indices]
    return A

어디에sub라인 리스트에서 사용하고 싶지 않은 패턴입니다.LinSplitUnOr

예를들면

A=['Apple.good','Orange.good','Pear.bad','Pear.good','Banana.bad','Potato.bad']
sub = 'good'
A=RemoveInList(sub,A)

그리고나서A될 것이다

여기에 이미지 설명 입력

언급URL : https://stackoverflow.com/questions/37372603/how-to-remove-specific-substrings-from-a-set-of-strings-in-python

반응형