(6)zip(*iterables) 生成一个迭代器,它聚合了可迭代对象的每个元素。
返回一个由元组组成的迭代器,其中第i个元组包含来自每个参数序列或可迭代对象的第i个元素,当最短的可迭代对象被输出时,该迭代器完成,
原理如下:
def zip(*iterables):
# zip('ABCD', 'xy') ---> Ax By
sentinel = object()
iterators = [iter(it) for it in iterables]
while iterators:
result = []
for it in itetators:
elem = next(it, sentinel)
if elem is sentinel:
return
result.append(elem)
yield tuple(result)
例:
x = [1, 2, 3, 4]
y = ['aaaa', 'bbbbb', 'ccccc']
z = (45, 34, 12, 90)
print(list(zip(x, y, z)))
print(list(zip(*zip(x, y, z)))) # *的作用是把上面生成的迭代器又再次拉链式的组合了该迭代器中的元素。
[(1, 'aaaa', 45), (2, 'bbbbb', 34), (3, 'ccccc', 12)]
[(1, 2, 3), ('aaaa', 'bbbbb', 'ccccc'), (45, 34, 12)]
例
l1 = [1,2,3,4,5,6]
l2 = ['aaaa','bbbbb','wendy','ccccc','sindy']
tu = ('**','***','****','*******')
b = filter(lambda x: x[0] > 2 and len(x[2]) > 4, zip(l1, l2, tu))
print(list(b))