Python zip() 函数详解:用法、并行迭代与矩阵转置

Noah
Noah
发布时间:2026-10-13 | 4人浏览过
原创

本文深入解析Python内置函数zip(),演示如何将多个可迭代对象打包为元组列表。涵盖长度不等时的截断行为、*号解压操作、for循环中的并行迭代技巧,以及利用zip实现二维矩阵行列互换的高级用法。此外,还介绍了基于zip的概率元素采样方法,帮助开发者高效处理数据组合与转换任务。

Python zip()函数基础用法与示例

Python中zip()函数的具体用法示例解析

函数定义:zip([iterable, ...])

zip()是Python语言的一个内置函数,它接收多个可迭代对象作为参数,将对应位置的元素组合成一个个元组(tuple),最终返回由这些元组构成的列表(list)。如果传入的参数长度不一致,返回的列表长度将与最短的那个参数保持一致。借助*号操作符,可以对列表进行解压(unzip)操作,具体效果见下文示例。

基础示例1


x = [1, 2, 3]
y = [4, 5, 6]
z = [7, 8, 9]
 
xyz = zip(x, y, z)

执行print xyz语句后的输出结果为:

[(1, 4, 7), (2, 5, 8), (3, 6, 9)]

示例2:处理两个长度不相等的列表的情况


x = [1, 2, 3]
y = [4, 5, 6, 7]
xy = zip(x, y)

执行print xy语句后的输出结果为:

[(1, 4), (2, 5), (3, 6)]

示例3


>>> name=('jack','beginman','sony','pcky')
>>> age=(2001,2003,2005,2000)
>>> for a,n in zip(name,age):
  print a,n

程序输出结果如下:

jack 2001 beginman 2003 sony 2005 pcky 2000

示例4:仅传入单个列表的情况


x = [1, 2, 3]
x = zip(x)

执行print x语句后的输出结果为:

[(1,), (2,), (3,)]

zip在并行迭代与矩阵变换中的应用

示例5

结合for循环使用,zip()方法支持并行迭代操作:


  l1 = [2,3,4]
  l2 = [4,5,6]
  for (x,y) in zip(l1,l2):
     print x,y,'--',x*y
2 4 -- 8
3 5 -- 15
4 6 -- 24

其工作原理是利用zip()生成的结果,在for循环中解包元组,并通过元组赋值运算实现逻辑。这类似于执行(x,y)=(2,6)这样的赋值与序列解包操作。在处理文件遍历时,这种技巧同样适用,例如遍历文件夹目录与文件操作,既便捷又实用。

1

示例6:二维矩阵变换(实现矩阵行列互换)

假设我们有一个由列表表示的二维矩阵a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]],通过Python列表推导式可以轻松完成此任务。

 


 print [ [row[col] for row in a] for col in range(len(a[0]))] [[1, 4, 7], [2, 5, 8], [3, 6, 9]]

另一种常见但稍显晦涩的方法是利用zip函数:

>>> a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] >>> zip(*a) [(1, 4, 7), (2, 5, 8), (3, 6, 9)] >>> map(list,zip(*a))

[[1, 4, 7], [2, 5, 8], [3, 6, 9]]

这种方法执行速度更快,但理解难度稍高。它将列表视为元组进行解压,恰好实现了“行列互换”的效果,随后通过map函数对每个元素应用list(),将元组转换回列表。

基于zip的概率元素采样方法

示例7:按指定概率获取元素


>>> import random 
  >>> def random_pick(seq,probabilities): 
   x = random.uniform(0, 1) 
   cumulative_probability = 0.0 
   for item, item_probability in zip(seq, probabilities): 
   cumulative_probability += item_probability 
   if x < cumulative_probability: 
     break 
   return item 
  >>> for i in range(15): 
  random_pick("abc",[0.1,0.3,0.6]) 
  'c' 'b' 'c' 'c' 'a' 'b' 'c' 'c' 'c' 'a' 'b' 'b' 'c' 'a' 'c'

该函数有一个限制条件:指定的概率列表必须与元素一一对应,且所有概率之和必须为1,否则可能无法按预期工作。简要解释如下:首先利用random.uniform()生成0到1之间的随机数并赋值给x,接着使用zip()将元素及其对应概率打包成元组,然后累加每个元素的概率,直到累计概率大于x时终止循环。

此时,“a”被选中的概率对应x取值位于0-0.1区间的情况;同理,“b”对应0.1-0.4,“c”对应0.4-1.0。假设x在0-1之间均匀取值,即可实现按指定概率采样的目的。

总结

以上内容介绍了Python中zip函数的详细用法及示例,希望能对读者有所帮助!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表