나는 strings 집합을 가지고 set1
있으며 모든 문자열 set1
에는 필요하지 않고 제거하려는 두 개의 특정 하위 문자열이 있습니다.
샘플 입력 :
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','')
그러나 이것은 전혀 작동하지 않는 것 같습니다. 출력에는 전혀 변화가 없으며 입력과 동일합니다. for x in list(set1)
원래 대신 사용하려고했지만 아무것도 변경되지 않습니다.
답변
문자열은 변경할 수 없습니다. string.replace
(python 2.x) 또는 str.replace
(python 3.x)는 새 문자열을 만듭니다 . 이것은 설명서에 명시되어 있습니다.
모든 하위 문자열 old가 new로 교체 된 string s 사본 을 리턴합니다 . …
이것은 세트를 다시 할당하거나 다시 채워야 함을 의미합니다 ( 세트 이해를 통해 다시 할당하는 것이 더 쉽습니다 ) .
new_set = {x.replace('.good', '').replace('.bad', '') for x in set1}
답변
>>> x = 'Pear.good'
>>> y = x.replace('.good','')
>>> y
'Pear'
>>> x
'Pear.good'
.replace
문자열을 변경 하지 않고 대체와 함께 문자열의 복사본을 반환합니다. 문자열은 변경할 수 없으므로 문자열을 직접 변경할 수 없습니다.
반환 값을 가져 와서 x.replace
새 세트에 넣어야합니다.
답변
당신이 필요로하는 것은 약간의 검은 마술입니다!
>>> a = ["cherry.bad","pear.good", "apple.good"]
>>> a = list(map(lambda x: x.replace('.good','').replace('.bad',''),a))
>>> a
['cherry', 'pear', 'apple']
답변
당신은 이것을 할 수 있습니다 :
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)
답변
나는 테스트를했지만 (귀하의 예제는 아님) 데이터는 순서대로 또는 전체를 반환하지 않습니다.
>>> 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']
답변
제거 할 하위 문자열이 여러 개인 경우 간단하고 효과적인 옵션 중 하나 re.sub
는 정규식 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
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
것