How can I make my code be a set?

前端 未结 3 719
Happy的楠姐
Happy的楠姐 2021-01-20 04:26

I have a little code that takes a list of objects, and only outputs the items in the list that are unique.

This is my code

def only_once(a):
    retu         


        
3条回答
  •  灰色年华
    2021-01-20 05:03

    If you need to remove any item that is in the list more than once, not just occurences after the first, you can use:

    # without using generators / comprehensions
    def only_once(iterable):
        seen = set()
        duplicates = set()
        for item in iterable:
            if item in seen:
                duplicates.add(item)
            seen.add(item)
        result = []
        for item in iterable:
            if item not in duplicates:
                result.append(item)
        return result
    

    For general order-preserving duplicate elimination, see unique_everseen in the itertools recipes:

    def unique_everseen(iterable, key=None):
        "List unique elements, preserving order. Remember all elements ever seen."
        # unique_everseen('AAAABBBCCDAABBB') --> A B C D
        # unique_everseen('ABBCcAD', str.lower) --> A B C D
        seen = set()
        seen_add = seen.add
        if key is None:
            for element in ifilterfalse(seen.__contains__, iterable):
                seen_add(element)
                yield element
        else:
            for element in iterable:
                k = key(element)
                if k not in seen:
                    seen_add(k)
                    yield element
    

提交回复
热议问题