2026-10-31 12:44:20
Python 的 itertools 模块是标准库中用于高效处理迭代任务的强大工具包,通过提供排列组合、无限迭代、链接分组等功能,显著简化复杂迭代逻辑。以下是其核心功能与实际应用的详细解析:

itertools.permutations(iterable, r=None)生成可迭代对象中所有长度为 r 的元素排列(顺序敏感)。示例:生成字符串 "ABC" 的所有 2 字符排列
import itertoolsperms = itertools.permutations("ABC", 2)print(list(perms)) # 输出: [('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'C'), ('C', 'A'), ('C', 'B')]itertools.combinations(iterable, r)生成所有长度为 r 的元素组合(顺序不敏感)。示例:生成字符串 "ABC" 的所有 2 字符组合
combs = itertools.combinations("ABC", 2)print(list(combs)) # 输出: [('A', 'B'), ('A', 'C'), ('B', 'C')]itertools.count(start=0, step=1)生成无限递增序列,适用于模拟连续数值或动态数据流。示例:生成 0 到 5 的偶数序列
counts = itertools.count(start=0, step=2)for i in range(3): print(next(counts)) # 输出: 0, 2, 4itertools.cycle(iterable)无限循环可迭代对象,常用于周期性任务(如轮询)。示例:循环输出 "AB" 3 次
cycles = itertools.cycle("AB")for _ in range(3): print(next(cycles), end=" ") # 输出: A B Aitertools.chain(*iterables)合并多个可迭代对象为一个连续序列,避免嵌套循环。示例:合并两个列表并遍历
list1 = [1, 2]list2 = ["a", "b"]chained = itertools.chain(list1, list2)print(list(chained)) # 输出: [1, 2, 'a', 'b']itertools.groupby(iterable, key=None)根据键函数对连续元素分组,需先排序以保证分组正确性。示例:按字符串长度分组
words = ["apple", "pear", "banana", "kiwi"]sorted_words = sorted(words, key=len)groups = itertools.groupby(sorted_words, key=len)for key, group in groups: print(f"{key}: {list(group)}") # 输出: 4: ['pear', 'kiwi'], 5: ['apple'], 6: ['banana']使用排列生成所有可能的 3 位数字密码:
digits = "0123456789"for p in itertools.permutations(digits, 3): print("".join(p)) # 输出所有 1000 种排列2. 数据流处理结合 count 和 takewhile 生成有限范围内的斐波那契数列:
def fibonacci(): a, b = 0, 1 while True: yield a a, b = b, a + bfib = itertools.takewhile(lambda x: x < 100, fibonacci())print(list(fib)) # 输出: [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]3. 批量任务调度使用 cycle 轮询分配任务到 3 个服务器:
servers = ["Server1", "Server2", "Server3"]tasks = ["Task1", "Task2", "Task3", "Task4"]server_cycle = itertools.cycle(servers)for task in tasks: print(f"{task} -> {next(server_cycle)}") # 输出: Task1->Server1, Task2->Server2, ...三、性能优势与注意事项通过灵活运用 itertools,开发者能以更简洁的代码实现复杂的迭代逻辑,同时提升程序性能和可读性。