我有一个名为parent_list
的父列表,以及两个子集,通过它我可以过滤parent_list
。这些子集也是python列表,它们被称为filter1
和filter2
。
我可以这样做:
final_list = [object for object in parent_list if object.pk not in filter1 or filter2]
或者我是否需要单独进行此过滤,如:
intermediate_list = [object for object in parent_list if object.pk not in filter1]
final_list = [object for object in intermediate_list if object.pk not in filter2]
我无法从python list comprehensions的文档中明确找到答案。
答案 0 :(得分:6)
使用集合快速查找项目:
final_list = [object for object in parent_list if object.pk not in set(filter1 + filter2)]
# ^
当从集合中删除重复项目时,整个搜索空间的大小也会减少。
在SO上找到此somewhere:
使用哈希表实现集合。每当你添加一个对象 一组,确定设置对象的存储器内的位置 使用要添加的对象的哈希值。在测试会员资格时, 所有需要做的就是查看对象是否在 位置由其哈希确定,因此此操作的速度确实如此 不依赖于集合的大小。对于列表,相反,整体而言 需要搜索列表,随着列表的增长,列表会变慢。
答案 1 :(得分:1)
我认为你可以这样做:
final_list = [object for object in parent_list if (object.pk not in filter1) and (object.pk not in filter2)]
我建议制作两组filter1
和filter2
并object.pk
进行过滤,只需从一个集合中获取一个元素就可以更快
答案 2 :(得分:1)
您也可以使用:
final_list = [object for object in parent_list if object.pk not in filter1+filter2]