Retaining order while using Python's set difference

后端 未结 3 1404
余生分开走
余生分开走 2020-12-16 13:36

I\'m doing a set difference operation in Python:

x = [1, 5, 3, 4]
y = [3]

result = list(set(x) - set(y))
print(result)

I\'m getting:

3条回答
  •  误落风尘
    2020-12-16 14:09

    It looks like you need an ordered set instead of a regular set.

    >>> x = [1, 5, 3, 4]
    >>> y = [3]
    >>> print(list(OrderedSet(x) - OrderedSet(y)))
    [1, 5, 4]
    

    Python doesn't come with an ordered set, but it is easy to make one:

    import collections
    
    class OrderedSet(collections.Set):
        def __init__(self, iterable=()):
            self.d = collections.OrderedDict.fromkeys(iterable)
    
        def __len__(self):
            return len(self.d)
    
        def __contains__(self, element):
            return element in self.d
    
        def __iter__(self):
            return iter(self.d)
    

    Hope this helps :-)

提交回复
热议问题