Python 内建函数 - zip(*iterables)

Python 的内置函数 zip() 用于将可迭代的对象作为参数,返回一个元组的迭代器,元组中的元素从每个迭代器中按顺序取出。当最短的迭代器耗尽时,迭代结束。如果想要处理不等长输入且关注所有值,可以考虑使用 itertools.zip_longest()。zip() 与星号(*)运算符结合可用于列表的解压操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用法

创建一个迭代器,它可以聚集来自每个iterables的元素。

返回的是元组的迭代器,其第i项元组包含了i个来自每个参数序列或迭代的元素,当用尽输入最短的迭代时迭代器停止。单参数下,它返回一个1次元组迭代器;无参数时,它返回一个空迭代,等于:

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)

迭代复制顺序必定是从左到右的规则。这使得用zip(*[iter(s)]*n)将长度为n的数据组进行数据序列聚集成为可能;并且,根据规则来重复相同的迭代器n次,以便每个输出元组都有n个迭代器调用的结果;在将输入划分为长度是n的块时,这项规则同样具有影响。

当你不在意更长的iterables的尾部或不匹配的值时,zip()是处理不等长输入的最好选择。如果这些值都很重要,你也可以使用itertools.zip_longest()

zip()结合 * 运算符可以用于解压列表:

>>>
>>> x = [1, 2, 3]
>>> y = [4, 5, 6]
>>> zipped = zip(x, y)
>>> list(zipped)
[(1, 4), (2, 5), (3, 6)]
>>> x2, y2 = zip(*zip(x, y))
>>> x == list(x2) and y == list(y2)
True

拓展阅读

itertools.zip_longest()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值