深入理解 Python 中的 zip 函数

目录

一、zip 函数的基础用法

二、处理不等长的可迭代对象

三、使用 * 运算符进行解压

四、在并行迭代中使用 zip

五、zip 与字典

六、高级示例

同时遍历多个列表

使用 zip 创建字典的进阶用法

利用 zip 进行数据筛选


🚀 个人主页:xmp65535

🚀 专栏:python技术专栏


Python 中的 zip 函数是一个内置函数,它用于将多个可迭代对象(如列表、元组或字符串)中的元素打包成一个元组列表。每个元组包含来自所有输入可迭代对象的对应元素。这个强大的函数简化了许多涉及并行迭代的常见任务。

一、zip 函数的基础用法

zip 的基本用法是将两个或多个可迭代对象作为参数,返回一个 zip 对象。这个 zip 对象是一个可迭代的,包含元组的序列,每个元组从每个输入可迭代对象中取出一个元素。

语法:

zip(iterable1, iterable2, ...)
  • iterable1iterable2, ... : 用于打包的可迭代对象,可以是多个,甚至可以为空。

返回值:

  • 返回一个由元组组成的迭代器,其中每个元组包含了传入的可迭代对象中相同位置的元素。

示例:

list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']
zipped = zip(list1, list2)
print(list(zipped))  # 输出:[(1, 'a'), (2, 'b'), (3, 'c')]

二、处理不等长的可迭代对象

当输入的可迭代对象长度不一致时,zip 会停止到最短的可迭代对象结束。这意味着长于其他对象的迭代对象的剩余部分将不会出现在 zip 结果中。

numbers = [1, 2, 3]
letters = ['a', 'b']
zipped = zip(numbers, letters)
print(list(zipped))

输出将是:

[(1, 'a'), (2, 'b')]

三、使用 * 运算符进行解压

zip 还可以与 * 运算符结合使用,进行所谓的解压操作。这可以将 zip 对象转换回原来的可迭代对象列表。

zipped = [(1, 'a'), (2, 'b'), (3, 'c')]
numbers, letters = zip(*zipped)
print(list(numbers))
print(list(letters))

输出将是:

[1, 2, 3]
['a', 'b', 'c']

四、在并行迭代中使用 zip

zip 函数在需要并行迭代多个可迭代对象时非常有用。例如,当你需要同时遍历多个列表,并在相同位置进行操作时。

names = ['Alice', 'Bob', 'Charlie']
ages = [24, 50, 18]
countries = ['Italy', 'USA', 'Canada']

for name, age, country in zip(names, ages, countries):
    print(f'{name} is {age} years old and comes from {country}')

五、zip 与字典

zip 也可以用来创建字典,将一系列的键和值配对。

keys = ['name', 'age', 'gender']
values = ['Alice', 28, 'Female']

info_dict = dict(zip(keys, values))
print(info_dict)

输出将是:

{'name': 'Alice', 'age': 28, 'gender': 'Female'}

六、高级示例

同时遍历多个列表

假设你在处理一个项目,需要从三个不同的列表中提取数据来生成一个综合信息列表。每个列表分别存储了用户的姓名、年龄和职业。

names = ["Alice", "Bob", "Charlie"]
ages = [25, 30, 35]
occupations = ["Engineer", "Doctor", "Artist"]

for name, age, occupation in zip(names, ages, occupations):
    print(f"{name} is {age} years old and works as a(n) {occupation}.")

这个例子展示了如何利用 zip 同时遍历多个列表,并在每次迭代中打印出对应的信息。

使用 zip 创建字典的进阶用法

zip 函数非常适合于将两个列表合并成一个字典,其中一个列表包含键,另一个列表包含值。这种方法特别有用,特别是在处理数据结构转换时。

properties = ["name", "age", "occupation"]
values = ["Alice", 25, "Engineer"]

user_info = dict(zip(properties, values))
print(user_info)

输出:

{'name': 'Alice', 'age': 25, 'occupation': 'Engineer'}

利用 zip 进行数据筛选

你还可以使用 zip 结合列表推导来对数据进行筛选。

numbers = [1, 2, 3, 4, 5, 6]
letters = ['a', 'b', 'c', 'd', 'e', 'f']

# 只选择索引为偶数的元素
filtered_pairs = [(num, letter) for index, (num, letter) in enumerate(zip(numbers, letters)) if index % 2 == 0]

print(filtered_pairs)

输出:

[(1, 'a'), (3, 'c'), (5, 'e')]

这个例子展示了如何仅选择索引为偶数的元素对。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/576610.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据结构:最小生成树(Prim算法和Kruskal算法)、图的最短路径(Dijkstra算法和Bellman-Ford算法)

什么是最小生成树?Prim算法和Kruskal算法是如何找到最小生成树的? 最小生成树是指在一个连通图中,通过连接所有节点并使得总权重最小的子图。 Prim算法和Kruskal算法是两种常用的算法,用于寻找最小生成树。 Prim算法的步骤如下&…

通过 QEMU 试用 ESP32-C3 的安全功能

概述 ESP32-C3 系列芯片支持可信启动、flash 加密、安全存储等多种安全功能,还有专用外设来支持 HMAC 和数字签名等用例。这些功能所需的私钥和配置大多存储在 ESP32-C3 的 eFuse 存储器中。 启用安全功能时需要谨慎,因为使用到的 eFuse 存储器是一次…

实现SpringMVC底层机制(二)

文章目录 1. 动态获取spring配置文件1.修改SunWebApplicationContext.java2.修改SunDispatcherServlet.java 2.自定义Service注解1.需求分析2.编写Monster.java3.自定义Service注解4.编写Service接口MonsterService.java5.编写Service实现类MonsterServiceImpl.java6.修改SunWe…

数据结构系列-二叉树之前序遍历

🌈个人主页:羽晨同学 💫个人格言:“成为自己未来的主人~” 这篇文章,我们主要的内容是对二叉树当中的前历的算法进行讲解,二叉树中的算法所要求实现的是 从根到左子树再到右子树的遍历顺序,可能这样不太…

C语言--基础面试真题

1、局部变量和静态变量的区别 普通局部变量和静态局部变量区别 存储位置: 普通局部变量存储在栈上 静态局部变量存储在静态存储区 生命周期: 当函数执行完毕时,普通局部变量会被销毁 静态局部变量的生命周期则是整个程序运行期间&#…

程序员学CFA——数量分析方法(四)

数量分析方法(四) 常见概率分布基本概念离散型随机变量与连续型随机变量离散型随机变量连续型随机变量 分布函数概率密度函数(PDF)累积分布函数(CDF) 离散分布离散均匀分布伯努利分布二项分布定义股价二叉树…

Rabbitmq安装延迟插件rabbitmq_delayed_message_exchange失败

Docker里的Rabbitmq容器安装延迟插件rabbitmq_delayed_message_exchange失败 一启动插件Rabbitmq容器直接停止运行了 rabbitmq-plugins enable rabbitmq_delayed_message_exchange排除了版本问题和端口问题等,发现是虚拟机运行内存不够,增加虚拟机运行内…

python基础——正则表达式

📝前言: 这篇文章主要想讲解一下python中的正则表达式: 1,什么是正则表达式 2,re模块三匹配 3,元字符匹配 4,具体示例 🎬个人简介:努力学习ing 📋个人专栏&am…

Hybrid Homomorphic Encryption:SE + HE

参考文献: [NLV11] Naehrig M, Lauter K, Vaikuntanathan V. Can homomorphic encryption be practical?[C]//Proceedings of the 3rd ACM workshop on Cloud computing security workshop. 2011: 113-124.[MJS16] Maux P, Journault A, Standaert F X, et al. To…

【定制化体验:使用Spring Boot自动配置,打造个性化Starter】

项目结构 Pom <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4…

yml文件修改工具

导入一个 yml 配置文件 可以根据给定的 name 源文件内容 举例如下 - alterId: 0cipher: autoname: 链接1port: 11004server: dotu-hkv1.03ezhg0qsa.downloadskip-cert-verify: truetls: falsetype: tpyudp: trueuuid: ac1f3b35-1d03-3a85-beab-根据name 可以快速将源内容进行替…

系统启动之后创建的第一个窗口是什么?

com.android.settings TYPE_BASE_APPLICATION 1 &#xff1b; 启动时显示的窗口有&#xff1a; 系统窗口有: TYPE_STATUS_BAR TYPE_SEARCH_BAR TYPE_PHONE TYPE_SYSTEM_ALERT TYPE_KEYGUARD TYPE_TOAST TYPE_SYSTEM_OVERLAY TYPE_PRIORITY_PHONE TYPE_SYSTEM_DIALOG…

Synchronized关键字的深入分析

一、引言 在多线程编程中&#xff0c;正确地管理并发是确保程序正确运行的关键。Java提供了多种同步工具&#xff0c;其中synchronized关键字是最基本且最常用的同步机制之一。本文旨在深入解析synchronized的实现原理&#xff0c;探讨其在不同应用场景中的使用&#xff0c;并…

创新书荐|用《创新者的窘境》指导企业应对AI颠覆技术避免被颠覆

如何利用《创新者的窘境》应对AI的颠覆性技术时&#xff0c;了解并实施正确的战略对于确保企业在动荡的市场环境中保持增长和竞争力至关重要。我们分析了市场领导者和初创公司如何利用AI开辟新的增长路径&#xff0c;以及企业如何在技术革命中维持竞争优势。想要深入了解并实践…

CogVLM CogAgent模型部署

CogVLM & CogAgent 下载地址 CogVLM & CogAgent 的 Github 官方仓库&#xff1a;https://github.com/THUDM/CogVLM CogVLM & CogAge…

了解ASK模块STX883Pro和超外接收模块SRX883Pro的独特之处 STX883Pro模块具有以下特点:

高发射功率&#xff1a;STX883Pro具有较高的发射功率&#xff0c;可实现长距离的信号传输&#xff0c;适用于需要覆盖广泛区域的应用场景。 高频率稳定性&#xff1a;具备稳定的频率输出&#xff0c;确保信号传输的可靠性和一致性&#xff0c;避免频率漂移导致的通信故障。 大…

异常检测 | SVDD支持向量数据描述异常数据检测(Matlab)

异常检测 | SVDD支持向量数据描述异常数据检测&#xff08;Matlab&#xff09; 目录 异常检测 | SVDD支持向量数据描述异常数据检测&#xff08;Matlab&#xff09;效果一览基本介绍程序设计参考资料 效果一览 基本介绍 用于一类或二元分类的 SVDD 模型 多种核函数&#xff08;…

基于模糊控制的电动汽车锂电池SOC主动均衡电路MATLAB仿真模型

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 模型简介 模型在 Matlab/Simulink仿真平台中搭建16节电芯锂电池电路模型&#xff0c;主要针对电动车锂电池组SOC差异性&#xff0c;采用模糊控制算法动态调节均衡电流&#xff0c;以减少均衡时间和能量损耗。…

换脸插件升级导致SDWebUI无法启动cannot import name ‘Undefined‘ from ‘pydantic.fields‘

今天在一台新的机器环境装了SDWEBUI&#xff0c;都使用最新的版本&#xff0c;升级了下换脸的插件&#xff0c;于是乎启动崩溃了。错误如下 Launching Web UI with arguments: --listen --skip-torch-cuda-test --disable-nan-check --skip-version-check --skip-python-versi…

SQL嵌套查询和集合查询

嵌套查询 先导概念 查询块&#xff1a;一个select语句为一个查询块 嵌套查询&#xff1a;将一个查询块嵌套在一个另一个查询块中where子句中的查询叫做嵌套查询。 嵌套查询的种类&#xff1a; 不相关子查询&#xff1a;子查询里的条件不依赖于父查询&#xff0c;从里到外依…
最新文章