Python基础总结之Python中常见的迭代器介绍
Python 提供了许多内置的迭代器,此外你还可以创建自定义的迭代器,以满足特定的编程需求。以下是一些常用的内置迭代器以及创建自定义迭代器的示例和工具类:
常用的内置迭代器
-
enumerate()
:- 将一个可迭代对象(如列表)组合为一个索引序列,常用于在
for
循环中同时获取索引和元素。
fruits = ['apple', 'banana', 'cherry'] for index, fruit in enumerate(fruits): print(index, fruit)
- 将一个可迭代对象(如列表)组合为一个索引序列,常用于在
-
zip()
:- 将多个可迭代对象组合为一个迭代器,每次迭代返回一个元组,元组的元素来自不同的可迭代对象。
names = ['Alice', 'Bob', 'Charlie'] scores = [85, 90, 95] for name, score in zip(names, scores): print(name, score)
-
iter()
和next()
:iter()
用于将对象转换为迭代器,next()
用于从迭代器中获取下一个元素,适用于需要手动控制迭代的场景。
nums = [1, 2, 3] it = iter(nums) print(next(it)) # 1 print(next(it)) # 2
-
reversed()
:- 返回一个反向迭代器,用于逆序遍历可迭代对象。
for num in reversed(range(5)): print(num)
-
itertools
模块:- 提供了一组强大的迭代器函数,例如
count()
、cycle()
、chain()
、islice()
等,用于创建复杂的迭代器。
from itertools import cycle, islice colors = cycle(['red', 'green', 'blue']) for color in islice(colors, 5): print(color)
- 提供了一组强大的迭代器函数,例如
自定义迭代器
你可以通过创建包含 __iter__()
和 __next__()
方法的类来自定义迭代器。以下是一个简单的自定义迭代器示例:
class Countdown:
def __init__(self, start):
self.current = start
def __iter__(self):
return self
def __next__(self):
if self.current <= 0:
raise StopIteration
self.current -= 1
return self.current
countdown = Countdown(5)
for num in countdown:
print(num)
迭代器工具类
你还可以创建一些常用的迭代器工具类,以提高编程效率。以下是一个通用的迭代器工具类示例:
class RangeIterator:
def __init__(self, start, end, step=1):
self.current = start
self.end = end
self.step = step
def __iter__(self):
return self
def __next__(self):
if self.current >= self.end:
raise StopIteration
value = self.current
self.current += self.step
return value
range_iterator = RangeIterator(1, 10, 2)
for num in range_iterator:
print(num)
这个 RangeIterator
类类似于 range()
函数,但可以更灵活地定义步长和范围。
通过使用这些内置和自定义的迭代器,你可以更好地控制迭代过程,优化代码,并应对各种复杂的编程场景。