Unlock Python’s itertools: Powerful Iterator Tools Explained with Code
This article introduces Python’s itertools library, explains how its iterator‑producing functions like accumulate, chain, combinations, and many others work, and provides clear code examples that demonstrate their usage and benefits for efficient data processing.
Introduction
Recently I have been busy and decided to write some technical articles to share knowledge and organize the fragmented concepts I have learned. Writing clearly helps thinking clearly, and clear thinking leads to mastery.
Why Pythonic Code Matters
Many developers strive to write more Pythonic code because it follows conventions, is easier to read, and often runs more efficiently. This article focuses on the standard library module itertools , which provides powerful iterator utilities.
itertools Library
Iterators (generators) are widely used in Python. Compared to lists, iterators offer lazy evaluation, consuming items only when needed, which improves development experience and runtime efficiency. In Python 3, functions like map and filter return iterators instead of lists.
While most developers only use range as an iterator and may find converting a list to an iterator with iter unnecessary, itertools fills the gap by providing many useful iterator‑producing functions.
Using itertools
Most functions in itertools return iterator objects that would otherwise require verbose code to achieve the same result, often with lower performance.
itertools.accumulate
Simple cumulative addition.
import itertools
x = itertools.accumulate(range(10))
print(list(x))
# Output: [0, 1, 3, 6, 10, 15, 21, 28, 36, 45]itertools.chain
Chains multiple iterables together.
import itertools
x = itertools.chain(range(3), range(4), [3, 2, 1])
print(list(x))
# Output: [0, 1, 2, 0, 1, 2, 3, 3, 2, 1]itertools.combinations
Generates all unique combinations of a specified length from an iterable.
import itertools
x = itertools.combinations(range(4), 3)
print(list(x))
# Output: [(0, 1, 2), (0, 1, 3), (0, 2, 3), (1, 2, 3)]itertools.combinations_with_replacement
Generates combinations allowing repeated elements.
import itertools
x = itertools.combinations_with_replacement('ABC', 2)
print(list(x))
# Output: [('A', 'A'), ('A', 'B'), ('A', 'C'), ('B', 'B'), ('B', 'C'), ('C', 'C')]itertools.compress
Filters elements from an iterable using a selector of boolean values.
import itertools
x = itertools.compress(range(5), (True, False, True, True, False))
print(list(x))
# Output: [0, 2, 3]itertools.count
Creates an infinite counter that can start at any number and step by any increment.
import itertools
x = itertools.count(start=20, step=-1)
print(list(itertools.islice(x, 0, 10)))
# Output: [20, 19, 18, 17, 16, 15, 14, 13, 12, 11]itertools.cycle
Cycles through the elements of an iterable indefinitely.
import itertools
x = itertools.cycle('ABC')
print(list(itertools.islice(x, 0, 10)))
# Output: ['A', 'B', 'C', 'A', 'B', 'C', 'A', 'B', 'C', 'A']itertools.dropwhile
Drops elements from the start of an iterable as long as a predicate is true.
import itertools
x = itertools.dropwhile(lambda e: e < 5, range(10))
print(list(x))
# Output: [5, 6, 7, 8, 9]itertools.filterfalse
Keeps elements for which the predicate returns False.
import itertools
x = itertools.filterfalse(lambda e: e < 5, (1, 5, 3, 6, 9, 4))
print(list(x))
# Output: [5, 6, 9]itertools.groupby
Groups consecutive elements that share a common key defined by a function.
import itertools
x = itertools.groupby(range(10), lambda x: x < 5 or x > 8)
for condition, numbers in x:
print(condition, list(numbers))
# Output:
# True [0, 1, 2, 3, 4]
# False [5, 6, 7, 8]
# True [9]itertools.islice
Slices an iterator without materializing it.
import itertools
x = itertools.islice(range(10), 0, 9, 2)
print(list(x))
# Output: [0, 2, 4, 6, 8]itertools.permutations
Generates all possible orderings of a specified length.
import itertools
x = itertools.permutations(range(4), 3)
print(list(x))
# Output: [(0, 1, 2), (0, 1, 3), (0, 2, 1), ...]itertools.product
Computes the Cartesian product of input iterables.
import itertools
x = itertools.product('ABC', range(3))
print(list(x))
# Output: [('A', 0), ('A', 1), ('A', 2), ('B', 0), ...]itertools.repeat
Repeats an object a specified number of times.
import itertools
x = itertools.repeat(0, 5)
print(list(x))
# Output: [0, 0, 0, 0, 0]itertools.starmap
Applies a function to arguments unpacked from an iterable of tuples, similar to map.
import itertools
x = itertools.starmap(str.islower, 'aBCDefGhI')
print(list(x))
# Output: [True, False, False, False, False, True, True, False, True]itertools.takewhile
Yields elements while the predicate is true, stopping at the first false.
import itertools
x = itertools.takewhile(lambda e: e < 5, range(10))
print(list(x))
# Output: [0, 1, 2, 3, 4]itertools.tee
Creates multiple independent iterators from a single original iterator.
import itertools
x1, x2 = itertools.tee(range(10), 2)
print(list(x1))
print(list(x2))
# Both outputs: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]itertools.zip_longest
Like zip, but continues until the longest iterable is exhausted, filling missing values with None.
import itertools
x = itertools.zip_longest(range(3), range(5))
print(list(x))
# Output: [(0, 0), (1, 1), (2, 2), (None, 3), (None, 4)]Conclusion
Mastering Python’s built‑in features and libraries such as itertools requires frequent practice; the more you use them, the more naturally they become part of your toolkit.
Signed-in readers can open the original source through BestHub's protected redirect.
This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactand we will review it promptly.
MaGe Linux Operations
Founded in 2009, MaGe Education is a top Chinese high‑end IT training brand. Its graduates earn 12K+ RMB salaries, and the school has trained tens of thousands of students. It offers high‑pay courses in Linux cloud operations, Python full‑stack, automation, data analysis, AI, and Go high‑concurrency architecture. Thanks to quality courses and a solid reputation, it has talent partnerships with numerous internet firms.
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.
