Skip to content

Instantly share code, notes, and snippets.

@kzinmr
Last active August 5, 2020 08:01
Show Gist options
  • Save kzinmr/97c7a53b58de99815e4ac731de06b53b to your computer and use it in GitHub Desktop.
Save kzinmr/97c7a53b58de99815e4ac731de06b53b to your computer and use it in GitHub Desktop.
def ordered_uniq(seq):
seen = set()
seen_add = seen.add
return [x for x in seq if x not in seen and not seen_add(x)]
def ordered_uniq_unhashable(seq):
seq_s = [str(l) for l in seq]
return [eval(s) for s in ordered_uniq(seq_s)]
@kzinmr
Copy link
Author

kzinmr commented Aug 5, 2020

from https://docs.python.org/2.6/library/itertools.html#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

def unique_justseen(iterable, key=None):
    "List unique elements, preserving order. Remember only the element just seen."
    # unique_justseen('AAAABBBCCDAABBB') --> A B C D A B
    # unique_justseen('ABBCcAD', str.lower) --> A B C A D
    return imap(next, imap(itemgetter(1), groupby(iterable, key)))

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment