Python内置模块--itertools详解

本文详细介绍了Python内置模块itertools的功能,包括序列计算、合并序列、排列组合、筛选序列和获取无限迭代器等,提供了丰富的例子和应用场景,帮助读者理解和运用itertools模块。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

序列计算

accumulate(iterable[, func])

创建一个迭代器,返回累加和或其他二元函数的累加结果(通过可选参数 func 指定)。
如果提供了 func ,它应是2个参数的函数。输入 iterable 元素类型应是 func 能支持的任意类型。
例如,对于默认的加法操作,元素可以是任一支持加法的类型,包括 Decimal 或 Fraction 。如果可迭代对象的输入为空,输出也为空。
与 reduce() 函数类似

>>> list(itertools.accumulate([1, 2, 3, 4, 5]))
[1, 3, 6, 10, 15]
>>> list(itertools.accumulate([1, 2, 3, 4, 5], lambda x, y: x*2+y))
[1, 4, 11, 26, 57]

starmap(function, iterable)

创建一个迭代器,使用从可迭代对象中获取的参数来计算该函数。
当参数对应的形参已从一个单独可迭代对象组合为元组时(数据已被“预组对”)可用此函数代替 map()。
map() 与 starmap() 之间的区别可以类比 function(a,b) 与 function(*c) 的区别。

>>> list(itertools.starmap(pow, ([2, 3], [3, 4], [10, 3])))
[8, 81, 1000]
>>> list(map(pow, [2, 3], [3, 4]))
[8, 81]

合并序列

chain(*iterables)

创建一个迭代器,它首先返回第一个可迭代对象中所有元素,接着返回下一个可迭代对象中所有元素,直到耗尽所有可迭代对象中的元素。可将多个序列处理为单个序列。

>>> list(itertools.chain('hello', 'world'))
['h', 'e', 'l', 'l', 'o', 'w', 'o', 'r', 'l', 'd']
# 如果是二层嵌套的可迭代对象,需要先解包
>>> list(itertools.chain(*[[123], ['hello'], [456]]))
[123, 'hello', 456]

chain.from_iterable(iterable)

构建类似 chain() 迭代器的另一个选择。从一个单独的可迭代参数中得到链式输入,该参数是延迟计算的。

>>> list(itertools.chain.from_iterable(['ABC', 'DEF']))
['A', 'B', 'C', 'D', 'E', 'F']
# 这里如果是二层嵌套的可迭代对象,就不需要多余的操作,比chain()少了一个步骤
>>> list(itertools.chain.from_iterable([[123], ['hello'], [456]]))
[123, 'hello', 456]

排列组合

combinations(iterable, r)

返回由输入 iterable 中元素组成长度为 r 的子序列。
组合按照字典序返回。所以如果输入 iterable 是有序的,生成的组合元组也是有序的。
即使元素的值相同,不同位置的元素也被认为是不同的。如果元素各自不同,那么每个组合中没有重复元素。
通俗点来说就是不重复的排列组合。(后面会介绍可以利用重复元素的排列组合的函数)

>>> list(itertools.combinations('ABCD', 2))
[('A', 'B'), ('A', 'C'), ('A', 'D'), ('B', 'C'), ('B', 'D'), ('C', 'D')]
>>> list(itertools.combinations(range(5), 3))
[(0, 1, 2), (0, 1, 3), (0, 1, 4), (0, 2, 3), (0, 2, 4), (0, 3, 4), (1, 2, 3), (1, 2, 4), (1, 3, 4), (2
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值