python zip 函数解析
1 def zip(*iterables): 2 # zip('ABCD', 'xy') --> Ax By 3 sentinel = object() 4 iterators = [iter(it) for it in iterables] 5 while iterators: 6 result = [] 7 for it in iterators: 8 elem = next(it, sentinel) 9 if elem is sentinel: 10 return 11 result.append(elem) 12 yield tuple(result)
运行
a = [1, 2, 3, 4, 5, 6] z = [iter(a)]*2 print zip(*z)
结果为
[(1, 2), (3, 4), (5, 6)]
1、

由此可见 对迭代器对象再次进行迭代 返回的还是之前的迭代器对象
2、

list z 中两个元素指向的是同一个迭代对象
3、

因为z[0] 和 z[1] 指向的是同一个迭代器对象, 所以对z[0].next() 之后 z[1]指向的迭代器对象也向后走了一步
while iterators 无限循环
for it in iterators
elem = it.next()
for 循环2次 相当于同一个迭代器对象每次while循环向后走两个
所以结果为上 [(1, 2), (3, 4), (5, 6)]

浙公网安备 33010602011771号