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

results matching ""

    No results matching ""