Python's itertools
library is a gem - you can compose elegant solutions
for a variety of problems with the functions it provides. In more-itertools
we collect additional building blocks, recipes, and routines for working with
Python iterables.
Grouping |
chunked,
ichunked,
sliced,
distribute,
divide,
split_at,
split_before,
split_after,
split_into,
split_when,
bucket,
unzip,
grouper,
partition |
Lookahead and lookback |
spy,
peekable,
seekable |
Windowing |
windowed,
substrings,
substrings_indexes,
stagger,
windowed_complete,
pairwise |
Augmenting |
count_cycle,
intersperse,
padded,
mark_ends,
repeat_last,
adjacent,
groupby_transform,
padnone,
ncycles |
Combining |
collapse,
sort_together,
interleave,
interleave_longest,
zip_offset,
zip_equal,
dotproduct,
convolve,
flatten,
roundrobin,
prepend,
value_chain |
Summarizing |
ilen,
unique_to_each,
sample,
consecutive_groups,
run_length,
map_reduce,
exactly_n,
is_sorted,
all_equal,
all_unique,
first_true,
quantify |
Selecting |
islice_extended,
first,
last,
one,
only,
strip,
lstrip,
rstrip,
filter_except
map_except
nth_or_last,
nth,
take,
tail,
unique_everseen,
unique_justseen |
Combinatorics |
distinct_permutations,
distinct_combinations,
circular_shifts,
partitions,
set_partitions,
product_index,
combination_index,
permutation_index,
powerset,
random_product,
random_permutation,
random_combination,
random_combination_with_replacement,
nth_product
nth_permutation
nth_combination |
Wrapping |
always_iterable,
always_reversible,
consumer,
with_iter,
iter_except |
Others |
locate,
rlocate,
replace,
numeric_range,
side_effect,
iterate,
difference,
make_decorator,
SequenceView,
time_limited,
consume,
tabulate,
repeatfunc |
To get started, install the library with pip:
pip install more-itertools
The recipes from the itertools docs
are included in the top-level package:
>>> from more_itertools import flatten
>>> iterable = [(0, 1), (2, 3)]
>>> list(flatten(iterable))
[0, 1, 2, 3]
Several new recipes are available as well:
>>> from more_itertools import chunked
>>> iterable = [0, 1, 2, 3, 4, 5, 6, 7, 8]
>>> list(chunked(iterable, 3))
[[0, 1, 2], [3, 4, 5], [6, 7, 8]]
>>> from more_itertools import spy
>>> iterable = (x * x for x in range(1, 6))
>>> head, iterable = spy(iterable, n=3)
>>> list(head)
[1, 4, 9]
>>> list(iterable)
[1, 4, 9, 16, 25]
For the full listing of functions, see the API documentation.
Blog posts about more-itertools
:
more-itertools
is maintained by @erikrose
and @bbayles, with help from many others.
If you have a problem or suggestion, please file a bug or pull request in this
repository. Thanks for contributing!