Source code for karld.iter_utils

from functools import partial

try:
    from itertools import ifilter
    from itertools import imap
except ImportError:
    imap = map
    ifilter = filter

from itertools import islice
from operator import itemgetter


[docs]def yield_getter_of(getter_maker, iterator): """ Iteratively map iterator over the result of getter_maker. :param getter_maker: function that returns a getter function. :param iterator: An iterator. """ return imap(getter_maker(), iterator)
[docs]def yield_nth_of(nth, iterator): """ For an iterator that returns sequences, yield the nth value of each. :param nth: Index desired column of each sequence. :type nth: int :param iterator: iterator of sequences. """ return yield_getter_of(partial(itemgetter, nth), iterator)
[docs]def i_batch(max_size, iterable): """ Generator that iteratively batches items to a max size and consumes the items iterable as each batch is yielded. :param max_size: Max size of each batch. :type max_size: int :param iterable: An iterable :type iterable: iter """ iterable_items = iter(iterable) for items_batch in iter(lambda: tuple(islice(iterable_items, max_size)), tuple()): yield items_batch