Python itertools内置无限迭代器详解

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

本文详细介绍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 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。