Python zip() 函数详解:用法、并行迭代与矩阵转置
本文深入解析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函数的详细用法及示例,希望能对读者有所帮助!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













