尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Python 内置函数:zip()

Python 内置函数:zip() 在, zip()是一个功能强大的内置函数, 它用于在多个可迭代对象里按索引位置把元素组合成元组, 进而形成新的迭代器。其常用于配对、合并、并行遍历等操作, 是处理多个数据序列的有效工具。zip() 此名字栩栩如生地阐明了其功能所在, 即把多个序列予以“咬合”, 使其如同拉链按项进行配对那般 , 其功能就如同拉链按项配对那样 , 将多个序列“咬合”在一起。一、函数语法zip(iterable1, iterable2, ..., iterableN)参数, 一个或者多个可继续迭代的对象, 像列表, 元组, 字符串或者range之内, 如果个数随意不限定, 然而最终结果之中仅仅保留最短可迭代对象长度相对应的那些元素。返回值给出这么一个对象它属于迭代器类别, 具体是zip类型, 其中每一元素, 皆为由传入诸个可迭代物内, 拥有相同索引数编号的成分所搭建起来的元组句号。若要去查看全部的结果, 能够使用 list(), 或者 tuple(), 从而将其转变为列表或者元组。二、基础用法示例1、将两个列表打包成对names [Alice, Bob, Charlie] scores [90, 85, 78] for name, score in zip(names, scores): print(f{name}: {score})输出Alice: 90 Bob: 85 Charlie: 782、运行zip() , 它会返回zip 对象, 要查看结果, 就得将其转换为列表或者元组。a [1, 2, 3] b [a, b, c] z zip(a, b) print(list(z)) # 输出 [(1, a), (2, b), (3, c)]3、多个可迭代对象a [1, 2, 3] b [a, b, c] c [x, y, z] print(list(zip(a, b, c))) # 输出[(1, a, x), (2, b, y), (3, c, z)]4、 长度不一致时按最短截断a [1, 2, 3] b [a, b] print(list(zip(a, b))) # 输出[(1, a), (2, b)] # 第 3 个元素被舍弃三、典型应用场景1、构建字典keys [id, name, age] values [101, Alice, 18] person dict(zip(keys, values)) print(person) # 输出{id: 101, name: Alice, age: 18}2、并行遍历多个序列students [Tom, Jerry, Spike] scores [88, 92, 75] for name, score in zip(students, scores): print(f{name}: {score})输出Tom: 88 Jerry: 92 Spike: 753、解包逆操作使用 * 运算符可以解包已 zip 的数据。zipped [(Alice, 25), (Bob, 30), (Charlie, 35)] names, ages zip(*zipped) print(names) # 输出: (Alice, Bob, Charlie) print(ages) # 输出: (25, 30, 35)“*”, 这是解包操作符, 它发挥的作用是, 把其中的每一项, 都单独地取出来, 以此作为参数, 传入到函数之中。4、转置二维列表matrix [ [1, 2, 3], [4, 5, 6] ] transposed list(zip(*matrix)) print(transposed) # 输出列表的行列互换 # [(1, 4), (2, 5), (3, 6)]四、补充说明1、zip() 功能是, 返回那种惰性迭代器, 它不会马上就生成全部所得, 而是当进行遍历操作的时候才会逐一去做计算, 这种情况是适宜用于大数据处理工作当中的。即zip() 返回的是迭代器只能被消费一次。zipped zip(names, ages) list(zipped) # 第一次可以正常使用 list(zipped) # 第二次返回空列表2、若想要进行强制的“等长配对”操作, 得以使用.( )此操作会对较短列表的那些缺失值予以填补, 但这是需要引入标准库才行的。from itertools import zip_longest a [1, 2] b [a, b, c] print(list(zip_longest(a, b, fillvalue-))) # 输出[(1, a), (2, b), (-, c)]3、zip() 可与 () 配合使用。names [Tom, Jerry, Spike] scores [88, 92, 75] for i, (n, s) in enumerate(zip(names, scores), start1): print(f第{i}位{n}{s}分)4、在 2 中zip() 直接返回列表而非迭代器。5、处理大型数据集之际, zip() 相较手动索引, 效率更高, 且更具某种况味。并行迭代处理当中有个强大工具名叫zip(), 它能让代码更简洁, 也能让代码更易读, 在需要同时去处理多个相关数据流序列的场景里它特别适用。
返回列表