最近我遇到了这个问题:
假设有一个我要处理的内容列表:
process_list=["/test/fruit/apple","/test/fruit/pineapple","/test/fruit/banana","/test/tech/apple-pen","/test/animal/python","/test/animal/penguin"]
我想使用另一个列表排除某些内容,例如:
exclude_list=["apple","python"]
在我将 except_list 应用到它之后,process_list 应该像这样(任何包含子项的 process_list 项:
["/test/fruit/banana","/test/animal/penguin","/test/fruit/pineapple"]
或者如果排除列表是:exclude_list=["pen","banana"]
应用过滤器后,process_list 应该是这样的:
["/test/fruit/apple","/test/fruit/pineapple","/test/animal/python"]
所以我一开始尝试的是:
for item in exclude_list:
for name in (process_list):
if item in name:
process_list.remove(name)
当然,这不起作用,因为在使用 a 迭代列表时从列表中删除元素for
不允许循环。该代码仅删除了第一个匹配项,然后停止了。
然后我想出了一种用另一个列表来做到这一点的方法:
deletion_list=[] #Track names that need to be deleted
for item in exclude_list:
for name in (process_list):
if item in name:
deletion_list.append(name)
# A list comprehension
process_list=[ x for x in process_list if x not in deletion_list ]
它有效,但我的直觉告诉我可能有更优雅的方法。现在需要另一个列表来存储需要删除的名称。有任何想法吗?