Grab unique tuples in python list, irrespective of order

后端 未结 4 1748
予麋鹿
予麋鹿 2021-01-04 10:14

I have a python list:

[ (2,2),(2,3),(1,4),(2,2), etc...]

What I need is some kind of function that reduces it to its unique components... w

4条回答
  •  情话喂你
    2021-01-04 10:48

    If order does not matter

    If the order of the result is not critical, you can convert your list to a set (because tuples are hashable) and convert the set back to a list:

    >>> l = [(2,2),(2,3),(1,4),(2,2)]
    >>> list(set(l))
    [(2, 3), (1, 4), (2, 2)]
    

    If order matters

    (UPDATE)

    As of CPython 3.6 (or any Python 3.7 version) regular dictionaries remember their insertion order, so you can simply issue.

    >>> l = [(2,2),(2,3),(1,4),(2,2)]
    >>> list(dict.fromkeys(l))
    [(2, 2), (2, 3), (1, 4)]
    

    (OLD ANSWER)

    If the order is important, the canonical way to filter the duplicates is this:

    >>> seen = set()
    >>> result = []
    >>> for item in l:
    ...     if item not in seen:
    ...         seen.add(item)
    ...         result.append(item)
    ... 
    >>> result
    [(2, 2), (2, 3), (1, 4)]
    

    Finally, a little slower and a bit more hackish, you can abuse an OrderedDict as an ordered set:

    >>> from collections import OrderedDict
    >>> OrderedDict.fromkeys(l).keys() # or list(OrderedDict.fromkeys(l)) if using a version where keys() does not return a list
    [(2, 2), (2, 3), (1, 4)]
    

提交回复
热议问题