如果项目在一个或两个(或N个)其他列表中,则如何从列表中删除该项目

Has*_*aig 3 python list-comprehension

我有一个名为的父列表parent_list,以及我要过滤的两个子集parent_list.这些子集也是python列表,它们被称为filter1filter2.

我可不可以做:

final_list = [object for object in parent_list if object.pk not in filter1 or filter2]
Run Code Online (Sandbox Code Playgroud)

或者我是否需要单独进行此过滤,如:

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]
Run Code Online (Sandbox Code Playgroud)

我无法从python列表推导的文档中明确找到答案.

Mos*_*oye 6

使用集合快速查找项目:

final_list = [object for object in parent_list if object.pk not in set(filter1 + filter2)]
#                                                                   ^ 
Run Code Online (Sandbox Code Playgroud)

从集合中删除重复项目时,整个搜索空间的大小也会减小.

发现这个地方的SO:

使用哈希表实现集合.无论何时向对象添加对象,都会使用要添加的对象的哈希来确定set对象的内存中的位置.在测试成员资格时,所有需要完成的工作基本上是查看对象是否位于由其哈希确定的位置,因此此操作的速度不依赖于集合的大小.相反,对于列表,需要搜索整个列表,随着列表的增长,列表将变慢.

  • 强制QuerySets通过切片来评估它们的项:`set(filter1 [:] + filter2 [:])`.您不需要将`set`转换为`list`. (2认同)