Python 删除字符串列表中的特定字符集

Python 删除字符串列表中的特定字符集,python,Python,我有一个字符串列表,希望使用另一个字符串列表并删除列表中坏列表组合的任何实例。例如下面的输出将是foo,bar,foobar,foofoo。。。目前我已经尝试了一些方法,例如下面的例子 mylist = ['foo!', 'bar\\n', 'foobar!!??!!', 'foofoo::!*'] remove_list = ['\\n', '!', '*', '?', ':'] for remove in remove_list: for strings in mylist:

我有一个字符串列表,希望使用另一个字符串列表并删除列表中坏列表组合的任何实例。例如下面的输出将是foo,bar,foobar,foofoo。。。目前我已经尝试了一些方法,例如下面的例子

mylist = ['foo!', 'bar\\n', 'foobar!!??!!', 'foofoo::!*']
remove_list = ['\\n', '!', '*', '?', ':']

for remove in remove_list: 
    for strings in mylist:
        strings = strings.replace(bad, ' ')

上面的代码不起作用,我曾经将其设置为一个新变量并附加该后缀,但效果不好,因为如果字符串中有两个问题,则会附加两次。

您更改了临时变量,而不是原始列表。相反,将结果分配回
mylist

for bad in remove_list: 
    for pos, string in enumerate(mylist):
        mylist[pos] = string.replace(bad, ' ')
试试这个:

mylist = ['foo!', 'bar\\n', 'foobar!!??!!', 'foofoo::!*']
bads = ['\\n', '!', '*', '?', ':']
result = []
for s in mylist:
  # s is a temporary copy
  for bad in bads:
    s = s.replace(bad, '') # for all bad remove it
  result.append(s)
print(result)

可以实现得更简洁,但这样更容易理解。

我很难解释这个问题,但我看到你在问题的顶部得到了想要的结果

mylist = ['foo!', 'bar\\n', 'foobar!!??!!', 'foofoo::!*']
remove_list = ['\\n', '!', '*', '?', ':']

output = output[]
for strings in mylist:
    for remove in remove_list: 
        strings = strings.replace(remove, '')
    output.append(strings)

您可以使用的另一个解决方案是理解列表,并删除所需的字符。然后,删除重复项

list_good = [word.replace(bad, '') for word in mylist for bad in remove_list]
list_good = list(set(list_good))

如果你只是想摆脱非字符,那么就这样做。它比比较两个单独的数组列表要好得多。

为什么不让regex为您做这项工作呢?这样没有嵌套循环(请确保正确转义):


my_list=[“foo!”,“bar\\n”,“foobar!!??!!”,“foofoo::*!]
删除=[“!”、“\\n”、“?”、“:”、“*”]
对于索引,枚举(我的列表)中的项:
对于要删除的字符:
如果项目中有字符:
项目=项目。替换(字符,“”)
我的列表[索引]=项目
打印(我的列表)#输出[“foo”、“bar”、“foobar”、“foofoo”]

我认为,如果您列出您希望代码执行的操作,这会有所帮助。你只是在替换你正在迭代的东西,但我在你的代码中看不到任何结果。我们的想法是一样的!
import re
for list1 in mylist:
    t = regex.sub('', list1)
    print(t)

import re

mylist = ['foo!', 'bar\\n', 'foobar!!??!!', 'foofoo::!*']
remove_list = [r'\\n', '\!', '\*', '\?', ':']
removals = re.compile('|'.join(remove_list))

print([removals.sub('', s) for s in mylist])
['foo', 'bar', 'foobar', 'foofoo']