itertools provides iterator building blocks for efficient looping.
1import itertools23# chain — join iterables4result = list(itertools.chain([1, 2], [3, 4]))5# [1, 2, 3, 4]67# product — cartesian product8pairs = list(itertools.product("AB", "12"))9# [("A","1"), ("A","2"), ("B","1"), ("B","2")]1011# combinations / permutations12comb = list(itertools.combinations([1, 2, 3], 2))13# [(1,2), (1,3), (2,3)]1415perm = list(itertools.permutations([1, 2, 3], 2))16# [(1,2), (1,3), (2,1), (2,3), (3,1), (3,2)]1718# groupby — group consecutive elements19data = [("A", 1), ("A", 2), ("B", 3)]20for key, group in itertools.groupby(data, key=lambda x: x[0]):21 print(key, list(group))2223# islice — slice an iterator24first_three = list(itertools.islice(range(100), 3))25# [0, 1, 2]2627# takewhile / dropwhile28result = list(itertools.takewhile(lambda x: x < 5, range(10)))29# [0, 1, 2, 3, 4]
All functions return iterators — memory efficient.