删除两个列表之间的交集

Ed.*_*Ed. 1 python django

我有两个对象列表:

m2m_links = mymodel._meta.many_to_many
o2m_links = mymodel._meta.get_all_related_objects()
Run Code Online (Sandbox Code Playgroud)

o2m_links中有一个我希望省略/删除的对象.它可以通过以下方式识别:

for r in m2m_links:
    if not r.rel.through._meta.auto_created:
        # Delete o2m_links object that has the same name as r.rel.through._meta.object_name
Run Code Online (Sandbox Code Playgroud)

如何删除与此循环命中的条件匹配的o2m_links对象?

Cob*_*bry 15

要删除两个列表之间的交集,您应该使用set

a = set(range(10))
b = set(range(5,15))
a-b
>>set([0, 1, 2, 3, 4])
b-a
>>set([10, 11, 12, 13, 14])
Run Code Online (Sandbox Code Playgroud)

  • 仅在您的列表仅包含唯一值时有效 (2认同)

Dan*_*son 3

您可以使用集合和列表理解来过滤列表:

names_to_remove = set([r.rel.through._meta.object_name for r in m2m_links if not r.rel.through._meta.auto_created])
filtered_list = [r for r in o2m_links if r.rel.through._meta.object_name in names_to_remove]
Run Code Online (Sandbox Code Playgroud)