Skip to main content
 首页 » 编程设计

python之如何删除基于 Python 中另一个列表的列表中的项目

2025年05月04日16cloudgamer

我有两个列表:

all_words_merged = ['ego', 'femina', 'incenderare', 'tuus', 'casa', 'et', 
                    'cutullus', 'incipere', 'et', 'wingardium', 'leviosa'] 
class_words_merged = ['femina', 'incenderare', 'incipere', 'wingardium'] 

我想获取 all_words_merged 并删除 class_words_merged 中出现的所有实例。结果列表应该是:

result = ['ego', 'tuus', 'casa', 'et', 'cutullus', 'et', 'leviosa'] 

我尝试了下面的代码,但它返回了一个空列表:

result = [x for x in class_words_merged if x[0] in all_words_merged] 

请您参考如下方法:

如果 class_words_merged 很大,首先将其转换为集合会加快速度:

>>> to_remove = set(class_words_merged) 
>>> [word for word in all_words_merged if word not in to_remove] 
['ego', 'tuus', 'casa', 'et', 'cutullus', 'et', 'leviosa'] 

一些时间

大 100 倍:

large_class_words_merged = class_words_merged * 100 

首先按设定创建:

%%timeit 
to_remove = set(large_class_words_merged) 
[word for word in all_words_merged if word not in to_remove] 
1000 loops, best of 3: 493 µs per loop 

并反复检查列表:

%timeit [word for word in all_words_merged if word not in large_class_words_merged] 
100 loops, best of 3: 3.18 ms per loop 

提示:

%timeit 和 %%imeit 是我在 Jupyter a notebook 中使用的 IPython 魔术命令。