我有两个列表:
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 魔术命令。
