Python zip函数及用法

本文介绍了Python的zip函数,它能将多个列表压缩成一个可迭代对象,以元组形式包含列表元素。在Python 2.x和3.x中,zip函数的行为有所不同,3.x返回zip对象而非列表。当列表长度不同时,zip以较短的列表为准。此外,zip也可用于并行遍历多个列表,展示了一个实用示例。

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

zip() 函数可以把两个列表“压缩”成一个 zip 对象(可迭代对象),这样就可以使用一个循环并行遍历两个列表。为了测试 zip() 函数的功能,我们可以先在交互式解释器中“试验”一下该函数的功能。

>>> a = ['a','b','c']
>>> b = [1, 2, 3]
>>> [x for x in zip(a,b)]
[('a', 1), ('b', 2), ('c', 3)]

从上面的测试结果来看,zip() 函数压缩得到的可迭代对象所包含的元素是由原列表元素组成的元组。

Pthon 2.x 的 zip() 函数直接返回列表,而不是返回 zip 对象。Python 2.x 的 zip() 函数返回的列表所包含的元素和 Python 3.x 的 zip() 返回的 zip 对象所包含的元素相同。

例如:

>>> c = [0.1 ,0.2]
>>> [x for x in zip(a,c)]
[('a', 0.1), ('b', 0.2)]

从上面代码可以看出,如果 zip() 函数压缩的两个列表长度不相等,那么 zip() 函数将以长度更短的列表为准。

zip() 函数不仅可以压缩两个列表,也可以压缩多个列表。比如下面试验同时压缩 3 个列表:

>>> [x for x in zip(a, b, c)]
[('a', 1, 0.1), ('b', 2, 0.2)]

从上面代码可以看出,如果使用 zip() 函数压缩 N 个列表,那么 zip() 函数返回的可

### Python `zip` 函数使用方法 #### 基本概念 Python 的 `zip()` 函数用于并行迭代多个可迭代对象,并返回一个由元组组成的迭代器。每次迭代,它会从每个输入序列中取出一个元素组合成一个新的元组。当最短的输入序列被耗尽,整个迭代过程结束。 注意调用 `type()` 函数可以观察到 `zip` 返回的是 `zip` 类的一个实例[^1]。 #### 判断 `zip` 对象是否为迭代器 可以通过导入 `collections.abc` 模块中的 `Iterable`, `Iterator` 来验证 `zip` 对象确实是一个迭代器: ```python from collections.abc import Iterable, Iterator list1 = ['name', 'age', 'color'] list2 = ['wang', '12', 'black'] new_iter = zip(list1, list2) print(isinstance(new_iter, Iterator)) ``` 这段代码的结果将会打印 `True` 表明 `zip` 对象确实是迭代器[^3]。 #### 实际应用案例 为了更好地理解 `zip` 如何工作,下面给出几个具体的例子来展示其功能: ##### 并行遍历多列表 假设存在两个列表分别存储姓名和年龄信息,则可通过如下方式同访问它们的内容: ```python names = ["Alice", "Bob"] ages = [25, 30] for name, age in zip(names, ages): print(f"{name} is {age} years old.") ``` 此段程序将依次输出 `"Alice is 25 years old."` 和 `"Bob is 30 years old."`[^2]。 ##### 解压操作 如果有一个包含嵌套元组或者列表的数据结构,比如矩阵形式的数据集,那么可以用带有星号解包的方式反转这一过程: 给定数据集 `xyz = [(1, 4, 7), (2, 5, 8), (3, 6, 9)]` ,执行 `zip(*xyz)` 可以得到原始列向量的形式 `(1, 2, 3)`, `(4, 5, 6)` 和 `(7, 8, 9)`[^4]。 #### 创建字典 还可以利用 `dict()` 构造函数配合 `zip()` 将两组键值配对转换成语法正确的字典格式: ```python keys = ['a', 'b', 'c'] values = [1, 2, 3] dictionary = dict(zip(keys, values)) print(dictionary) # 输出 {'a': 1, 'b': 2, 'c': 3} ``` 上述代码片段演示了如何创建一个简单的映射关系表。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值