zip函数介绍
zip函数是一个创建一个聚合了来自每个可迭代对象中的元素的迭代器。
返回一个元组的迭代器,其中的第 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 iterators:
elem = next(it, sentinel)
if elem is sentinel:
return
result.append(elem)
yield tuple(result)
用法
使用dict转换成字典
l1 = ["name", "age", "address"]
l2 = ["quanag", 18]
res1 = dict(zip(l1, l2))
# res1的值是:{'name': 'quanag', 'age': 18}
可以转换成list转换成列表
res2 = list(zip(l1,l2))
# res2的值是: [('name', 'quanag'), ('age', 18)]
保留长列表多余部分的值
- 当不用关心较长可迭代对象末尾不匹配的值时,则 zip() 只须使用长度不相等的输入即可。 如果那些值很重要,则应改用 itertools.zip_longest()
- 如果想使用zip,如果l1中长度超过l2的值的长度,多出来的就会丢掉,如果想保留,没有对应的话,就使用zip_longest
from itertools import zip_longest res3 = dict(zip_longest(l1, l2)) # res3的值是:{'name': 'quanag', 'age': 18, 'address': None}
也可以使用默认值参数,指定默认值
from itertools import zip_longest
res4 = dict(zip_longest(l1, l2, fillvalue="haha"))
# res4的值是: {'name': 'quanag', 'age': 18, 'address': 'haha'}