Python itertools内置无限迭代器详解

桃夭
桃夭
发布时间:2026-10-16 | 5人浏览过
原创

本文详细介绍Python标准库itertools中的内置无限迭代器,包括count()生成自然数序列、cycle()循环序列、repeat()重复元素以及takewhile()截取有限序列的方法,并演示chain()串联和groupby()分组技巧,帮助开发者高效处理迭代对象。

前言:

Python的标准库itertools提供了大量用于操作迭代对象的实用函数,其中包含几个特殊的“无限”迭代器工具。

1、count()创建自然数序列

import itertools
 
n = 0
natuals = itertools.count(1)
for m in natuals:
    print(m)

由于count(n)会创建一个从起始数字n开始直至无穷大的迭代器,上述代码将不断打印自然数序列,无法自动停止,必须通过Ctrl+C强制退出。

运行结果:

0 1 2 3 4 5 6 7 ...

2、cycle()创建序列循环

cycle()会将传入的序列无限次重复输出。

示例1、循环列表中的内容:

natuals = itertools.cycle([1, 2, 3])
for m in natuals:
    print(m)

运行结果:

1 2 3 1 2 3 1 2 3 ...

示例2、字符串中字符循环:

import itertools
cs = itertools.cycle('ABC') # 注意字符串也是序列的一种
for c in cs:
    print(c)

运行结果:

A B C A B C A B C ...

3、repeat()把一个元素有限次重复

repeat()默认行为是无限重复一个元素,但若提供第二个参数,则可以限定重复的次数。

ns = itertools.repeat('A', 3)
for n in ns:
    print(n)

运行结果:

A A A ...

4、takewhile()根据条件判断来截取出一个有限的序列

无限序列仅在for循环迭代时才会持续生成元素,创建迭代对象时并不会预先生成所有元素,内存中也无法存储无限多个元素。尽管无限序列可以无限迭代,但通常我们使用takewhile()等函数根据特定条件截取有限序列。

import itertools
 
natuals = itertools.count(1)
ns = itertools.takewhile(lambda x: x <= 10, natuals)
print(list(ns))

运行结果:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

迭代器测试:

对于有限数据的迭代器,每次调用都会弹出内部数据。

import itertools
 
natuals = itertools.count(1)
ns = itertools.takewhile(lambda x: x <= 3, natuals)
for n in ns:
    print(n)
 
print(list(ns))

运行结果:

1 2 3 []

5、chain()迭代对象串联

chain()函数可以将多个迭代对象串联起来,形成一个新的、更大的迭代器。

for c in itertools.chain('ABC', 'XYZ'):
    print(c)

运行结果:

'A' 'B' 'C' 'X' 'Y' 'Z'

6、groupby()迭代器元素分组

groupby()函数用于将迭代器中相邻的重复元素分组提取出来,常用于字符串处理。

for key, group in itertools.groupby('AAABBBCCAAA'):
    print(key, list(group))

运行结果:

A ['A', 'A', 'A'] B ['B', 'B', 'B'] C ['C', 'C'] A ['A', 'A', 'A']

实际的分组规则由函数决定,只要函数对两个元素返回的值相等,它们就被归为一组,函数返回值作为组的key。若需忽略大小写进行分组,可使元素'A'和'a'返回相同的key。

for key, group in itertools.groupby('AaaBBbcCAAa', lambda c: c.upper()):
    print(key, list(group))

运行结果:

A ['A', 'a', 'a'] B ['B', 'B', 'b'] C ['c', 'C'] A ['A', 'A', 'a']

至此,关于Python itertools包内置无限迭代器的介绍结束,更多相关Python itertools内置迭代器内容可搜索本站历史文章或继续浏览后续相关文章,希望大家以后多多支持本站!

相关标签:

本站声明

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

Python 相关产品和应用

全部下载

专题列表