有没有办法检查列表元素是否在字符串中并替换它们?

2024-05-21 03:55:44 发布

您现在位置:Python中文网/ 问答频道 /正文

下面是我尝试过的代码,但它会为这两种情况返回一个输出

alist = ['bla', 'blblblbl', 'asasa', 'blblblblblb']
astring = 'bla lalala lvlvl lblblbl asasa'
for i in alist:
    if i in astring:
        newstring = astring.replace(i, 'True')
        print(newstring)

输出:

True lalala lvlvl lblblbl asasa
bla lalala lvlvl lblblbl True

我需要:

True lalala lvlvl lblblbl True

Tags: 代码intruefor情况blaalistastring
3条回答

str.replace通过将旧的替换为新的方式返回字符串的新副本,并且您不保存它,所以只需始终保存新副本并执行下一个replace操作

Return a copy of the string with all occurrences of substring old replaced by new

alist = ['bla', 'blblblbl', 'asasa', 'blblblblblb']
astring = 'bla lalala lvlvl lblblbl asasa'
    for i in alist:
       if i in astring:
           astring = astring.replace(i,'True')  # True lalala lvlvl lblblbl True
    print(astring)

你可以很容易地解决这个问题回复sub你知道吗

alist = ['bla', 'blblblbl', 'asasa', 'blblblblblb']
astring = 'bla lalala lvlvl lblblbl asasa'
print(re.sub("|".join(sorted(alist,key=len,reverse=True)),"True",astring))

我建议只拆分astring,使用列表理解来进行替换,然后将其连接回去:

print(' '.join(['True' if i in alist else i for i in astring.split()]))

产生:

True lalala lvlvl lblblbl True

把它分解一下:

print(' '.join([
    'True' if i in alist else i 
    for i in astring.split()
]))
  • astring.split()==['bla', 'lalala', 'lvlvl', 'lblblbl', 'asasa']
  • ^如果ialist中,{}用'True'替换i
  • ['True' if i in alist else i for i in astring.split()]==['True', 'lalala', 'lvlvl', 'lblblbl', 'True']
  • ' '.join(['True', 'lalala', 'lvlvl', 'lblblbl', 'True']将列表转换为一个字符串,其中' '连接列表元素。你知道吗

相关问题 更多 >