I have a set of strings set1, and all the strings in set1 have a two specific substrings which I don’t need and want to remove.
Sample Input:
set1={'Apple.good','Orange.good','Pear.bad','Pear.good','Banana.bad','Potato.bad'}
So basically I want the .good and .bad substrings removed from all the strings. What I tried:
for x in set1:
x.replace('.good','')
x.replace('.bad','')
But this doesn’t seem to work at all. There is absolutely no change in the output and it is the same as the input. I tried using for x in list(set1) instead of the original one but that doesn’t change anything.
>>> x = 'Pear.good'
>>> y = x.replace('.good','')
>>> y
'Pear'
>>> x
'Pear.good'
.replace doesn’t change the string, it returns a copy of the string with the replacement. You can’t change the string directly because strings are immutable.
You need to take the return values from x.replace and put them in a new set.
回答 2
您所需要的只是一点黑魔法!
>>> a =["cherry.bad","pear.good","apple.good"]>>> a = list(map(lambda x: x.replace('.good','').replace('.bad',''),a))>>> a
['cherry','pear','apple']
>>> a = ["cherry.bad","pear.good", "apple.good"]
>>> a = list(map(lambda x: x.replace('.good','').replace('.bad',''),a))
>>> a
['cherry', 'pear', 'apple']
回答 3
您可以这样做:
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)
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)
回答 4
我进行了测试(但这不是您的示例),并且数据未按顺序或完整地返回它们
>>> 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']
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']
When there are multiple substrings to remove, one simple and effective option is to use re.sub with a compiled pattern that involves joining all the substrings-to-remove using the regex OR (|) pipe.
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']
回答 6
如果清单
我正在为包含一组字符串的列表做某事,并且您想要删除具有特定子字符串的所有行,可以执行此操作
import re
defRemoveInList(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 notin indices]return A
这里sub是一个图案,你不希望在行的列表LinSplitUnOr
例如
A=['Apple.good','Orange.good','Pear.bad','Pear.good','Banana.bad','Potato.bad']
sub ='good'
A=RemoveInList(sub,A)
I was doing something for a list which is a set of strings and you want to remove all lines that have a certain substring you can do this
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
where sub is a patter that you do not wish to have in a list of lines LinSplitUnOr
for example
A=['Apple.good','Orange.good','Pear.bad','Pear.good','Banana.bad','Potato.bad']
sub = 'good'
A=RemoveInList(sub,A)
Then A will be
回答 7
如果您从列表中删除某些内容,则可以使用以下方式:(方法子区分大小写)
new_list =[]
old_list=["ABCDEFG","HKLMNOP","QRSTUV"]for data in old_list:
new_list.append(re.sub("AB|M|TV"," ", data))print(new_list)// output :[' CDEFG','HKL NOP','QRSTUV']