Python itertools模块核心功能与实战应用详解

键盘旁的猫
键盘旁的猫
发布时间:2026-10-13 | 6人浏览过
原创

本文深入解析Python内置模块itertools的核心功能,涵盖chain、count、compress、starmap、product、permutations及combinations等关键函数。通过具体代码示例,展示如何高效处理序列链接、无限序列生成、条件过滤及笛卡尔积计算,并提供利用combinations求解特定质数组合的实战案例,帮助开发者掌握高级迭代技巧。

itertools模块概述与引入

介绍

itertools是Python语言中内置的标准库模块,以其简洁的接口和强大的数据处理能力著称。本文旨在系统梳理该模块的主要功能,并辅以简明易懂的应用示例;若现有内容未能覆盖您的具体需求,欢迎进一步补充探讨。

引入该模块仅需执行一行代码:import itertools

序列链接与基础迭代:chain与count

chain()函数

顾名思义,chain()函数用于将多个列表、元组或可迭代对象连接成一个单一的迭代器,并返回一个新的迭代对象。


letters = ['a', 'b', 'c', 'd', 'e', 'f']
booleans = [1, 0, 1, 0, 0, 1]
   print(list(itertools.chain(letters,booleans)))
#   ['a', 'b', 'c', 'd', 'e', 'f', 1, 0, 1, 0, 0, 1]
 
  print(tuple(itertools.chain(letters,letters[3:])))
#   ('a', 'b', 'c', 'd', 'e', 'f', 'd', 'e', 'f')
 
  print(set(itertools.chain(letters,letters[3:])))
#   {'a', 'd', 'b', 'e', 'c', 'f'}
    
  print(list(itertools.chain(letters,letters[3:])))
#   ['a', 'b', 'c', 'd', 'e', 'f', 'd', 'e', 'f']
 
  for item in list(itertools.chain(letters,booleans)):
    print(item)

count()函数

该函数用于生成一个无界序列,语法为count(start=0, step=1)。例如,从100开始,步长为2,循环打印10次对应值;需要注意的是,count()会无限循环,因此必须在代码中手动添加break语句以终止循环。


  i = 0
  for item in itertools.count(100,2):
    i += 1
    if i > 10 : break
    
    print(item) 
 
filterfalse ()
   Python filterfalse(contintion,data) 迭代过滤条件为false的数据。如果条件为空,返回data中为false的项;
booleans = [1, 0, 1, 0, 0, 1]
numbers = [23, 20, 44, 32, 7, 12]
 
print(list(itertools.filterfalse(None,booleans)))
#   [0, 0, 0]
print(list(itertools.filterfalse(lambda x : x < 20,numbers)))
#  [23, 20, 44, 32]

数据过滤与映射:compress与starmap

compress()函数

compress()函数根据第二个集合(过滤器)中元素的布尔真值,从第一个集合中筛选并返回对应的元素。


print(list(itertools.compress(letters,booleans)))
# ['a', 'c', 'f']

starmap()函数

starmap(func, list[])用于对列表中的每一项调用指定函数。它特别适用于参数以元组形式存储的情况,将元组解包后传递给函数执行。


starmap(pow, [(2,5), (3,2), (10,3)]) --> 32 9 1000
 
>>> from itertools import *
>>> x = starmap(max,[[5,14,5],[2,34,6],[3,5,2]])
>>> for i in x:
>>> print (i)
14
34
5
repeat()
repeat(object[, times]) 重复times次;
repeat(10, 3) --> 10 10 10
dropwhile()
dropwhile(func, seq );当函数f执行返回假时, 开始迭代序列
dropwhile(lambda x: x<5, [1,4,6,4,1]) --> 6 4 1
takewhile()
takewhile(predicate, iterable);返回序列,当predicate为true是截止。
takewhile(lambda x: x<5, [1,4,6,4,1]) --> 1 4
islice()
islice(seq[, start], stop[, step]);返回序列seq的从start开始到stop结束的步长为step的元素的迭代器
for i in islice("abcdef", 0, 4, 2):#a, c
  print i

组合数学计算:product、permutations与combinations

product()函数

product(iter1, iter2, ... iterN, [repeat=1])创建一个迭代器,生成表示多个输入序列中项目的笛卡尔积元组。repeat参数用于指定重复生成序列的次数,默认为1。

   


# product('ABCD', 'xy') --> Ax Ay Bx By Cx Cy Dx Dy
  # product(range(2), repeat=3) --> 000 001 010 011 100 101 110 111
for i in product([1, 2, 3], [4, 5], [6, 7]):
  print i
(1, 4, 6)
(1, 4, 7)
(1, 5, 6)
(1, 5, 7)
(2, 4, 6)
(2, 4, 7)
(2, 5, 6)
(2, 5, 7)
(3, 4, 6)
(3, 4, 7)
(3, 5, 6)
(3, 5, 7)

permutations()函数

permutations(p[, r])返回从序列p中任意选取r个元素进行排列的元组迭代器,适用于计算有序排列组合。


for i in permutations([1, 2, 3], 3):
  print i
(1, 2, 3)
(1, 3, 2)
(2, 1, 3)
(2, 3, 1)
(3, 1, 2)
(3, 2, 1)


combinations()函数

combinations(iterable, r)创建一个迭代器,返回iterable中所有长度为r的子序列。返回的子序列中的项按照输入iterable中的原始顺序进行排序,且元素不重复。

注意:combinations默认不包含重复元素。


for i in combinations([1, 2, 3], 2):
  print i
(1, 2)
(1, 3)
(2, 3)
combinations_with_replacement()

上述示例为不带重复的情况,以下是带重复的组合示例:


for i in combinations_with_replacement([1, 2, 3], 2):
  print i
(1, 1)
(1, 2)
(1, 3)
(2, 2)
(2, 3)
(3, 3)

实战案例:利用combinations求解质数组合

应用示例

求解质数序列中,由1,3,5,7,9,11,13,15中的三个数组成且和为35的组合;


def get_three_data(data_list,amount):
  for data in list(itertools.combinations(data_list, 3)):
    if sum(data) == amount:
      print(data)
#(7, 13, 15)
#(9, 11, 15)

总结

以上所述是小编给大家介绍的python itertools功能,希望对大家有所帮助!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表