Subtracting two lists in Python

前端 未结 13 1572
一整个雨季
一整个雨季 2020-12-02 15:31

In Python, How can one subtract two non-unique, unordered lists? Say we have a = [0,1,2,1,0] and b = [0, 1, 1] I\'d like to do something like

13条回答
  •  自闭症患者
    2020-12-02 16:04

    Python 2.7 and 3.2 added the collections.Counter class, which is a dictionary subclass that maps elements to the number of occurrences of the element. This can be used as a multiset. You can do something like this:

    from collections import Counter
    a = Counter([0, 1, 2, 1, 0])
    b = Counter([0, 1, 1])
    c = a - b  # ignores items in b missing in a
    
    print(list(c.elements()))  # -> [0, 2]
    

    As well, if you want to check that every element in b is in a:

    # a[key] returns 0 if key not in a, instead of raising an exception
    assert all(a[key] >= b[key] for key in b)
    

    But since you are stuck with 2.5, you could try importing it and define your own version if that fails. That way you will be sure to get the latest version if it is available, and fall back to a working version if not. You will also benefit from speed improvements if if gets converted to a C implementation in the future.

    try:
       from collections import Counter
    except ImportError:
        class Counter(dict):
           ...
    

    You can find the current Python source here.

提交回复
热议问题