深入理解 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.mzph.cn/web/4978.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【多态】有关多继承和菱形继承的多态

博主首页: 有趣的中国人 专栏首页: C进阶 其它专栏: C初阶 | 初阶数据结构 | Linux 博主会持续更新 本篇文章主要讲解 多继承和菱形继承的多态 的相关内容 文章目录 1. 回顾多态底层2. 抽象类2.1 概念2.2 接口继承和实现继承 3. 虚表所在…

数学小报4 - 三次方程的求根公式 Quadratic Formula

数学小报4 - 三次方程的求根公式 Quadratic Formula 0. 前言 完整内容同步发表于 https://blog.csdn.net/Mr_Azz/article/details/135443217 由于证明量过于巨大,部分证明简化,详情请见网址。 1. 思考 我们学习过一元二次方程的求根公式 x − b …

05.Vue2.x 数据代理

文章目录 Vue中的数据代理 Vue中的数据代理 !<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>数…

Linux——web建立wordpress

下载 [rootnfs-server ~]# yum install php wget https://wordpress.org/latest.tar.gz解压 /var/www/html [rootnfs-server html]# tar -xzvf latest.tar.gz [rootnfs-server html]# rm latest.tar.gz授权 [rootnfs-server html]# chown -R www:www /var/www/html添加文件备…

利用kimi等大模型进行运维参数解析和调优

在运维时&#xff0c;经常遇到很多参数&#xff0c;有些参数不知道意义&#xff0c;知道意义的也有些不知道合理参考值是多少。利用kimi等大模型来当老司机&#xff0c;轻松解决运维难题。 例如在运维hive参数时&#xff0c;有些不知道作用&#xff0c;提示次如下 你的角色是…

windows ubuntu sed,awk,grep篇:7.sed 多行模式及循环

目录 46.读取下一行数据并附加到模式空间(命令 N) 47.打印多行模式中的第一行(命令 P) 48. 删除多行模式中的第一行(命令 D) 49.循环和分支(命令 b 和 :label 标签) 50.使用命令 t 进行循环 Sed 默认每次只处理一行数据&#xff0c;除非使用 H,G 或者 N 等命令创建多行模式&…

python学习笔记B-11:序列结构之列表--二维列表的遍历和生成式

二维列表的遍历方式&#xff0c;使用双层for循环&#xff0c;遍历索引号。 二维列表的生成式&#xff0c;也是使用类似双层循环的形式生成。 print("##初始化二维列表&#xff0c;每个元素就是1个列表") lst [["东方延续","太空军自然选择号舰长&qu…

释放Stable Diffusion 无限可能

最近在整理大语言模型的系列内容&#xff0c;Stable Diffusion 是我下一篇博客的主题。关注 Stable Diffusion&#xff0c;是因为它是目前最受欢迎和影响力最大的多模态生成模型之一。Stable Diffusion 于 2022 年 8 月发布&#xff0c;主要用于根据文本的描述产生详细图像&…

android 判断文件是否存在

在 Android 中&#xff0c;你可以使用 java.io.File 类来判断一个文件是否存在。下面是一个简单的示例代码&#xff1a; import java.io.File; public class FileChecker { public static boolean isFileExist(String filePath) { File file new File(fi…

基于SpringBoot+Vue笔记记录分享网站设计与实现

项目介绍&#xff1a; 信息数据从传统到当代&#xff0c;是一直在变革当中&#xff0c;突如其来的互联网让传统的信息管理看到了革命性的曙光&#xff0c;因为传统信息管理从时效性&#xff0c;还是安全性&#xff0c;还是可操作性等各个方面来讲&#xff0c;遇到了互联网时代…

uniApp设置和清除定时器

首先是在data中定义一个变量&#xff0c;用来存放定时器 data() {return {timer: null,} } 在适当的地方创建定时器 this.timer setInterval(() > {console.log(111); }, 10000) 在onHide或者是onUnload中销毁定时器&#xff0c;一般来说tabbar页面的切换会触发onHide&…

C语言 | Leetcode C语言题解之第50题Pow(x,n)

题目&#xff1a; 题解&#xff1a; double myPow(double x, int n){if(n 0 || x 1){return 1;}if(n < 0){return 1/(x*myPow(x,-(n1)));}if(n % 2 0){return myPow(x*x,n/2);}else{return x*myPow(x*x,(n - 1)/2);} }

【Jenkins】持续集成与交付 (三):有关报错解决(Jenkins (2.387.3) or higher required)

🟣【Jenkins】持续集成与交付 (三):有关报错解决Jenkins (2.387.3) or higher required 一、Jenkins主页报错二、安装Jenkins插件报错三、解决过程(解压替换jenkins.war)四、重新访问登录💖The Begin💖点点关注,收藏不迷路💖 一、Jenkins主页报错 New version …

Git Submodule 全流程使用指南

Git Submodule 是 Git 中用于管理子项目的强大功能。它允许我们将一个 Git 仓库作为另一个 Git 仓库的子模块进行管理&#xff0c;从而使项目结构更加清晰&#xff0c;代码维护更加方便。 本指南将详细讲解 Git Submodule 的创建、规划、更新、合并全流程的使用过程和操作步骤…

每天一个数据分析题(二百八十二)

积分表result中有A B C D四列&#xff0c;要求&#xff1a;1&#xff09;当A列值大于等于B列时&#xff0c;选择A列否则选择B列 2&#xff09;当C列值大于等于D列时&#xff0c;选择C列否则选择D列 用SQL语句实现正确的是&#xff1a;&#xff08; &#xff09; A. select ( w…

吴恩达2022机器学习专项课程(一)7.2 逻辑回归的简化成本函数

问题预览/关键词 本节课内容逻辑回归的损失函数简化之后的形式是&#xff1f;为什么可以简化&#xff1f;成本函数的通用形式是&#xff1f;逻辑回归成本函数的最终形式是&#xff1f;逻辑回归为什么用对数损失函数计算成本函数&#xff1f;为什么不直接给出逻辑回归损失函数的…

[详解]Spring AOP

&#x1f3a5; 个人主页&#xff1a;Dikz12&#x1f525;个人专栏&#xff1a;Spring学习之路&#x1f4d5;格言&#xff1a;吾愚多不敏&#xff0c;而愿加学欢迎大家&#x1f44d;点赞✍评论⭐收藏 目录 什么是AOP? Spring AOP 快速入门 Spring AOP核心概念 切点(Point…

selenium 4.x入门篇(环境搭建、八大元素定位)

背景 Web自动化测现状 1. 属于 E2E 测试 2. 过去通过点点点 3. 好的测试&#xff0c;还需要记录、调试网页的细节 一、selenium4.x环境搭建 一键搭建 pip3 install webdriver-helper 安装后自动的完成&#xff1a; 1. 查看浏览器的版本号 2. 查询操作系统的类型…

【智能优化算法】蚱蜢优化算法(Grasshopper Optimization Algorithm,GOA)

蚱蜢优化算法(Grasshopper Optimization Algorithm&#xff0c;GOA)是期刊“IEEE Access”&#xff08;IF 3.9&#xff09;的2021年智能优化算法 01.引言 蚱蜢优化算法(Grasshopper optimization algorithm, GOA)&#xff0c;并将其应用于结构优化中的挑战性问题。该算法在数学…

安卓手机APP开发__媒体开发部分__APK裁剪

安卓手机APP开发__媒体开发部分__APK裁剪 目录 概述 仅使用必要的依赖 启用代码和资源的裁剪 指定你的APP需要哪一个渲染器 指定你的APP需要哪个抽取器 定制媒体源的实例化 概述 最小化APK的大小是开发一个好的安卓APP的一个重要的方面.当面向的是正在开发 的市场时更是…