构造一个具有与Zip()相同功能的迭代器。Python
时间: 2024-02-19 15:59:17 浏览: 56
python学习之迭代器
好的,我可以帮您解答这个问题。
首先,我们需要了解`zip()`函数的功能。`zip()`函数可以将多个可迭代对象中对应的元素打包成一个元组,然后返回一个迭代器,其语法如下:
``` python
zip(*iterables)
```
其中,`iterables`表示一个或多个可迭代对象。
那么,我们可以构造一个具有与`zip()`相同功能的迭代器,代码如下:
``` python
class MyZip:
def __init__(self, *iterables):
self.iterables = iterables
self.count = 0
def __iter__(self):
return self
def __next__(self):
result = []
for iterable in self.iterables:
try:
value = iterable[self.count]
except IndexError:
raise StopIteration
result.append(value)
self.count += 1
return tuple(result)
```
这个迭代器的实现方式是,每次调用`__next__()`方法时,从可迭代对象中取出对应位置的元素,将其打包成一个元组,并将迭代位置向后移动一位,直到其中任意一个可迭代对象到达末尾,此时抛出`StopIteration`异常。同时,我们还需要实现`__iter__()`方法,使得该类的实例可以被迭代。
使用该迭代器的方式与`zip()`函数相同,如下所示:
``` python
a = [1, 2, 3]
b = ['a', 'b', 'c']
c = (True, False, True)
for i in MyZip(a, b, c):
print(i)
```
输出结果为:
```
(1, 'a', True)
(2, 'b', False)
(3, 'c', True)
```
希望这个回答对您有所帮助!
阅读全文