def zip(*iterables):
# zip('ABCD', 'xy') --> Ax By
sentinel = object()
iterators = [iter(it) for it in iterables]
while iterators:
result = []
for it in iterators:
elem = next(it, sentinel)
if elem is sentinel:
return
result.append(elem)
print(elem)
yield tuple(result)
使用:
list(zip('abc','def'))
输出:
a
d
b
e
c
f
[('a', 'd'), ('b', 'e'), ('c', 'f')]
问题: 为什么'd'在'a'之后传入而不是'b'?
答案 0 :(得分:0)
使用next会限制'abc'
和'def'
内访问的值。
iterators=[iter('abc'),iter('def')]
for it in iterators:
print(next(it))
print(next(it))
print(next(it))
输出:
一
B'/ P>
C
d
ë
˚F
现在,如果我们只在for循环中使用next一次,我们将只从每个序列中获取一个元素;然后,这个元素将从迭代器中耗尽。因为第一个元素已经用尽,我们现在可以以相同的方式访问每个序列的第二个元素。
iterators=[iter('abc'),iter('def')]
for x in range(1,4):
print('Next will access element :' +str(x))
for it in iterators:
print(next(it))
print('Element %s has been exhausted\n' %(str(x)))
输出
Next will access element :1
a
d
Element 1 has been exhausted
Next will access element :2
b
e
Element 2 has been exhausted
Next will access element :3
c
f
Element 3 has been exhausted