Python - 了解Zip

时间:2014-03-25 11:13:45

标签: python python-3.x zip

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'?

1 个答案:

答案 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