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.sub
regex 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
'source' 카테고리의 다른 글
Spring Security / SpringMVC에서 인증된 사용자를 수동으로 설정하는 방법 (0) | 2022.09.29 |
---|---|
팬더에 가입하는 것과 합병하는 것의 차이점은 무엇인가요? (0) | 2022.09.29 |
URL 단축 웹사이트와 같은 PHP 단축 해시 (0) | 2022.09.29 |
기존 DataFrame에 새 열을 추가하려면 어떻게 해야 합니까? (0) | 2022.09.29 |
pip을 사용하여 패키지를 업데이트/업그레이드하는 방법 (0) | 2022.09.29 |