diff options
Diffstat (limited to 'itertoolset.py')
-rw-r--r-- | itertoolset.py | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/itertoolset.py b/itertoolset.py new file mode 100644 index 0000000..ae4be8a --- /dev/null +++ b/itertoolset.py @@ -0,0 +1,30 @@ +from itertools import * + +def roundrobin(*iterables): + """roundrobin('ABC', 'D', 'EF') --> A D E B F C""" + pending = len(iterables) + nexts = cycle(iter(it).next for it in iterables) + while pending: + try: + for next in nexts: + yield next() + except StopIteration: + pending -= 1 + nexts = cycle(islice(nexts, pending)) + +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 |