Delete intersection between two lists

前端 未结 3 1228
耶瑟儿~
耶瑟儿~ 2020-12-17 05:27

I have two lists of objects:

m2m_links = mymodel._meta.many_to_many
o2m_links = mymodel._meta.get_all_related_objects()

There is an object

相关标签:
3条回答
  • 2020-12-17 05:57

    to remove the intersection between two list you should use 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])
    
    0 讨论(0)
  • 2020-12-17 06:07

    Use remove:

    some_list.remove(some_item)
    

    See: http://docs.python.org/tutorial/datastructures.html

    However, if the item doesn't match, it'll raise a ValueError, so unless you're sure the item is actually in the list, catch the error.

    0 讨论(0)
  • 2020-12-17 06:09

    You can use a set and a list comprehension to filter the list:

    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]
    
    0 讨论(0)
提交回复
热议问题