Introduction π
The itertools module provides powerful tools for working with iterators. It helps you loop efficiently, generate combinations, create infinite iterators, and build complex iteration logic.
Note
π‘ Highly optimized β super fast
π‘ Used in algorithms, data processing, AI, simulations, and combinatorics
1. Importing itertools π§±
import_itertools.py
import itertools2. Infinite Iterators βΎοΈ
count() β Infinite Counting
count_example.py
for num in itertools.count(start=10, step=2):
print(num)
if num > 20:
breakβ Generates: 10, 12, 14, ...
cycle() β Repeat a Sequence Forever
cycle_example.py
for item in itertools.cycle(["A", "B", "C"]):
print(item)
breakβ Cycles through values infinitely
repeat() β Repeat a Value
repeat_example.py
for x in itertools.repeat("Hi", 3):
print(x)β Useful for filling data
3. Combinatoric Iterators π―
product() β Cartesian Product
product_example.py
for p in itertools.product([1, 2], ["A", "B"]):
print(p)β Output: (1, 'A'), (1, 'B'), (2, 'A'), (2, 'B')
permutations()
permutations_example.py
for p in itertools.permutations([1, 2, 3], 2):
print(p)β Order matters β (1,2), (2,1)β¦
combinations()
combinations_example.py
for c in itertools.combinations([1, 2, 3], 2):
print(c)β Order doesn't matter β (1,2), (1,3), (2,3)
combinations_with_replacement()
cwr_example.py
for c in itertools.combinations_with_replacement([1, 2], 2):
print(c)β Ex: (1,1), (1,2), (2,2)
4. Utility Iterators π§°
accumulate() β Running Totals
accumulate_example.py
import itertools, operator
nums = [1, 2, 3, 4]
print(list(itertools.accumulate(nums)))
print(list(itertools.accumulate(nums, operator.mul)))β Default: sum
β With operator.mul β running product
chain() β Join Iterables
chain_example.py
for item in itertools.chain([1, 2], ["A", "B"]):
print(item)β Merges multiple iterables
chain.from_iterable()
chain_from_iterable.py
nested = [[1, 2], [3, 4]]
print(list(itertools.chain.from_iterable(nested)))compress() β Filter by Selector
compress_example.py
items = ["A", "B", "C", "D"]
selectors = [1, 0, 1, 0]
print(list(itertools.compress(items, selectors)))β Output: ["A", "C"]
dropwhile() & takewhile()
drop_take_while.py
nums = [1, 2, 3, 4, 1]
print(list(itertools.dropwhile(lambda x: x < 3, nums)))
print(list(itertools.takewhile(lambda x: x < 3, nums)))β dropwhile β skip until condition false
β takewhile β take while condition true
filterfalse()
filterfalse_example.py
print(list(itertools.filterfalse(lambda x: x % 2 == 0, [1,2,3,4])))β Opposite of filter()
5. Grouping Data β groupby() π
groupby_example.py
data = [("A", 1), ("A", 2), ("B", 1), ("B", 3)]
for key, group in itertools.groupby(data, lambda x: x[0]):
print(key, list(group))Note
6. Real-World Example β Password Generator π
password_itertools.py
import itertools, string
chars = string.ascii_letters + string.digits
passwords = itertools.product(chars, repeat=3)
for pwd in passwords:
print("".join(pwd))
breakβ Generates password combinations
7. Real-World Example β Flatten Nested Lists π₯
flatten_example.py
nested = [[1, 2], [3, 4, 5]]
flat = list(itertools.chain.from_iterable(nested))
print(flat)8. Itertools Cheat Sheet π
| Category | Functions |
|---|---|
| Infinite Iterators | count, cycle, repeat |
| Combinatorics | product, permutations, combinations |
| Filtering | compress, dropwhile, takewhile, filterfalse |
| Joining | chain, chain.from_iterable |
| Accumulation | accumulate |
| Grouping | groupby |
Best Practices π‘
- β Use product, combinations for combinatorics
- β Use infinite iterators carefully β always add a break
- β Prefer chain for merging lists instead of β+β
- β Use groupby after sorting data
- β itertools works best with generators β memory efficient
Conclusion π
You now fully understand the itertools module! Want the next topic? Try Functools, Statistics, Shutil, or Pathlib. Just tell me! π