List unique elements, preserving order. Remember all elements ever seen.
(iterable, key=None)
| 3 | |
| 4 | |
| 5 | def unique_everseen(iterable, key=None): |
| 6 | "List unique elements, preserving order. Remember all elements ever seen." |
| 7 | # unique_everseen('AAAABBBCCDAABBB') --> A B C D |
| 8 | # unique_everseen('ABBCcAD', str.lower) --> A B C D |
| 9 | seen = set() |
| 10 | seen_add = seen.add |
| 11 | if key is None: |
| 12 | for element in filterfalse(seen.__contains__, iterable): |
| 13 | seen_add(element) |
| 14 | yield element |
| 15 | else: |
| 16 | for element in iterable: |
| 17 | k = key(element) |
| 18 | if k not in seen: |
| 19 | seen_add(k) |
| 20 | yield element |
| 21 | |
| 22 | |
| 23 | # copied from more_itertools 8.8 |
nothing calls this directly
no test coverage detected
searching dependent graphs…