zip(*iterables)
-
概述:
创建一个迭代器,用来聚合每个可迭代对象中的元素。
zip()
函数会返回一个元组的迭代器,其中第i
个元组包含每个参数序列或可迭代对象中的第i
个元素。当最短的可迭代参数遍历到末尾的时候,返回的元组迭代器的结束位置也就确定了。如果传入的可迭代参数只有一个,那么返回的元组迭代器每次迭代产生的对象是一个长度为
1
的元组,可能有些绕,可以看看下面的例子:# coding=utf-8 l = [1, 2, 3] z = zip(l) print('zip()函数返回的对象是:', type(z)) t = next(z) print('zip对象每次迭代返回的对象类型是:', type(t)) print('本例的zip对象每次迭代返回的对象长度是:', len(t)) '''output zip()函数返回的对象是: <class 'zip'> zip对象每次迭代返回的对象类型是: <class 'tuple'> 本例的zip对象每次迭代返回的对象长度是: 1 '''
如果没有参数序列,
zip()
函数会返回一个空的迭代器。zip
函数的功能等同于下面的代码:def zip(*iterables): # zip('ABCD', 'xy') --> Ax By # sentinel是一个哨兵 sentinel = object() iterators = [iter(it) for it in iterables] while iterators: result = [] for it in iterators: # 如果迭代器it迭代结束,那么会将sentinel返回 elem = next(it, sentinel) # 如果下面的条件成立,说明存在迭代器迭代结束 if elem is sentinel: return result.append(elem) yield tuple(result)
-
参数:
- 第一个参数
*iterables
:可迭代对象序列,可以接收多个可迭代对象。
- 第一个参数