欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python 3 内置函数 zip( )

程序员文章站 2022-07-14 16:14:05
...

Python 3 内置函数 zip( )


Python 3.8.5

语法格式:

zip(*iterables)

描述:

  • 返回一个以元组为组成元素的迭代器,其中的第 i 个元组包含来自每个参数序列或可迭代对象的第 i 个元素。 当所输入可迭代对象中最短的一个被耗尽时,迭代器将停止迭代。 
  • 该函数创建一个聚合了来自每个可迭代对象中的元素的迭代器,这样做的好处是节约了不少的内存。
  • 当只有一个可迭代对象参数时,它将返回一个单元组的迭代器。 不带参数时,它将返回一个空迭代器。
  • 利用 * 号操作符,可以将元组解压为列表。

参数说明:

  • iterabl —— 一个或多个可迭代对象。

返回值:

  • 返回一个对象。

示例:

>>> a = [1, 2, 3]
>>> b = [4, 5, 6]
>>> c = [4, 5, 6, 7, 8]

>>> zipped = zip(a, b)           # 返回一个对象
>>> zipped
<zip object at 0x103abc288>

>>> list(zipped)                 # list() 转换为列表
[(1, 4), (2, 5), (3, 6)]

>>> list(zip(a,c))               # 元素个数与最短的列表一致
[(1, 4), (2, 5), (3, 6)]
 
>>> a1, a2 = zip(*zip(a,b))      # 与 zip 相反,zip(*) 可理解为解压,返回二维矩阵式
>>> list(a1)
[1, 2, 3]

>>> list(a2)
[4, 5, 6]

函数会保证可迭代对象按从左至右的顺序被求值。 使得可以通过 zip(*[iter(s)]*n) 这样的惯用形式将一系列数据聚类为长度为 n 的分组。 这将重复 同样的 迭代器 n 次,以便每个输出的元组具有第 n 次调用该迭代器的结果。 它的作用效果就是将输入拆分为长度为 n 的数据块。

当你不用关心较长可迭代对象末尾不匹配的值时,则 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

注意:

  • zip 方法在 Python 2 和 Python 3 中的不同:在 Python 2.x zip( ) 返回的是一个列表。