说明
《Python 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
itertools.cycle() 是 Python itertools 库中的一个函数,用于创建一个无限迭代器,该迭代器会不断循环给定的可迭代对象中的元素。这个函数非常适合需要重复处理一组元素的情况。
语法为 itertools.cycle(iterable)
创建一个迭代器,返回 iterable 中所有元素并保存一个副本。当取完 iterable 中所有元素,返回副本中的所有元素,无限重复。返回一个无限迭代器,它会无限次地重复给定的可迭代对象中的元素。
大致相当于:
def cycle(iterable):
# cycle('ABCD') --> A B C D A B C D A B C D ...
saved = []
for element in iterable:
yield element
saved.append(element)
while saved:
for element in saved:
yield element
注意,该函数可能需要相当大的辅助空间(取决于 iterable 的长度)。
如:
import itertools
foo = itertools.cycle('123')
for i in foo:
print(i)
'''
1
2
3
1
2
3
1
2
3
...
# 按Ctrl+C退出
'''
import itertools
# 创建一个循环迭代器,循环 'A', 'B', 'C'
cycler = itertools.cycle(['A', 'B', 'C'])
# 输出前九个值
for _ in range(9):
print(next(cycler))
# 输出:
'''
A
B
C
A
B
C
A
B
C
'''
import itertools
# 创建一个循环迭代器,循环字符串 'XYZ'
cycler = itertools.cycle('XYZ')
# 输出前六个值
for _ in range(6):
print(next(cycler))
# 输出:
'''
X
Y
Z
X
Y
Z
'''
可以在循环中使用 itertools.cycle() 来重复执行某些操作:
import itertools
colors = ['red', 'green', 'blue']
color_cycle = itertools.cycle(colors)
# 模拟处理多项任务,每个任务依次分配一个颜色
for task in range(10):
color = next(color_cycle)
print(f"Task {task} is assigned color {color}")
# 输出:
'''
Task 0 is assigned color red
Task 1 is assigned color green
Task 2 is assigned color blue
Task 3 is assigned color red
Task 4 is assigned color green
Task 5 is assigned color blue
Task 6 is assigned color red
Task 7 is assigned color green
Task 8 is assigned color blue
Task 9 is assigned color red
'''
常见应用如下:
示例:轮流分配任务
import itertools
# 任务列表和资源列表
tasks = ['Task1', 'Task2', 'Task3', 'Task4', 'Task5']
resources = ['ResourceA', 'ResourceB', 'ResourceC']
# 创建一个循环迭代器
resource_cycle = itertools.cycle(resources)
# 轮流分配资源给任务
for task in tasks:
resource = next(resource_cycle)
print(f"{task} is assigned to {resource}")
# 输出:
'''
Task1 is assigned to ResourceA
Task2 is assigned to ResourceB
Task3 is assigned to ResourceC
Task4 is assigned to ResourceA
Task5 is assigned to ResourceB
'''
通过这些示例,可以看到 itertools.cycle() 在需要重复使用一组值的场景中非常有用。它可以简化代码,实现更高效的循环操作。
更新时间:July 3, 2024, 4:54 p.m. 标签:python cycle 迭代