python 之 zip 和 * 解包操作

文章目录

      • 1. `zip` 函数
        • 语法:
        • 示例:
        • 特点:
        • 应用场景:
      • 2. `*` 操作符
        • 语法:
        • 示例:
        • 应用场景:
      • 3. `zip` 和 `*` 的结合使用
        • 示例:转置二维列表
      • 4. `zip` 和 `*` 的其他用法
        • 示例 1:合并多个列表
        • 示例 2:将两个列表合并为字典
        • 示例 3:解包并传递函数参数
      • 5. 注意事项
      • 总结

在 Python 中, zip* 是两个非常强大的工具,常用于处理可迭代对象(如列表、元组等)。以下是它们的详细介绍和用法:


1. zip 函数

zip 是一个内置函数,用于将多个可迭代对象“压缩”在一起,返回一个元组的迭代器。

语法:
zip(*iterables)
  • 参数*iterables 表示可以传入多个可迭代对象(如列表、元组、字符串等)。
  • 返回值:一个元组的迭代器,每个元组包含来自输入可迭代对象的对应元素。
示例:
list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']

# 使用 zip 压缩
zipped = zip(list1, list2)
print(list(zipped))  # 输出: [(1, 'a'), (2, 'b'), (3, 'c')]
特点:
  • 如果输入的可迭代对象长度不一致,zip 会以最短的可迭代对象为准。
  • 返回的是一个迭代器,如果需要列表或其他数据结构,可以显式转换(如 list(zip(...)))。
应用场景:
  • 同时遍历多个列表。
  • 将多个列表合并为字典。
  • 转置二维列表(矩阵)。

2. * 操作符

* 是 Python 中的解包操作符,用于将可迭代对象解包为单独的元素。

语法:
*iterable
  • 作用:将可迭代对象(如列表、元组、集合等)解包为单独的元素。
  • 常见用途
    • 在函数调用中解包参数。
    • 在列表、元组等数据结构中合并多个可迭代对象。
示例:
# 解包列表
numbers = [1, 2, 3]
print(*numbers)  # 输出: 1 2 3

# 解包字符串
text = "abc"
print(*text)  # 输出: a b c
应用场景:
  • 将列表或元组的元素作为函数参数传递。
  • 合并多个可迭代对象。
  • zip 中转置二维列表。

3. zip* 的结合使用

zip* 经常结合使用,尤其是在处理二维列表(矩阵)的转置时。

示例:转置二维列表
matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]

# 使用 zip 和 * 转置
transposed = list(zip(*matrix))
print(transposed)  # 输出: [(1, 4, 7), (2, 5, 8), (3, 6, 9)]

解释

  • *matrix 将二维列表解包为多个一维列表(即每一行)。
  • zip(*matrix) 将这些行“压缩”在一起,形成转置后的列。

4. zip* 的其他用法

示例 1:合并多个列表
list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']
list3 = [True, False, True]

# 合并多个列表
combined = list(zip(list1, list2, list3))
print(combined)  # 输出: [(1, 'a', True), (2, 'b', False), (3, 'c', True)]
示例 2:将两个列表合并为字典
keys = ['a', 'b', 'c']
values = [1, 2, 3]

# 合并为字典
dictionary = dict(zip(keys, values))
print(dictionary)  # 输出: {'a': 1, 'b': 2, 'c': 3}
示例 3:解包并传递函数参数
def add(a, b, c):
    return a + b + c

numbers = [1, 2, 3]

# 使用 * 解包并传递参数
result = add(*numbers)
print(result)  # 输出: 6

5. 注意事项

  • zip 返回的是一个迭代器,只能遍历一次。如果需要多次使用,可以将其转换为列表或其他数据结构。
  • 如果输入的可迭代对象长度不一致,zip 会以最短的为准,多余的元素会被忽略。
  • * 操作符只能用于可迭代对象,不能用于非可迭代对象(如整数、浮点数等)。

总结

  • zip:用于将多个可迭代对象“压缩”在一起,返回一个元组的迭代器。
  • *:用于解包可迭代对象,常用于函数参数传递和合并可迭代对象。
  • 结合使用zip* 结合可以实现二维列表的转置、合并多个列表等功能。

掌握 zip* 的用法,可以让你更高效地处理 Python 中的可迭代对象!

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

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

相关文章

gesp(C++六级)(6)洛谷:P10109:[GESP202312 六级] 工作沟通

gesp(C六级)(6)洛谷:P10109:[GESP202312 六级] 工作沟通 题目描述 某公司有 N N N 名员工,编号从 0 0 0 至 N − 1 N-1 N−1。其中,除了 0 0 0 号员工是老板,其余每名员工都有一个直接领导…

冯诺依曼结构和进程概念及其相关的内容的简单介绍

目录 ​编辑 冯诺依曼体系结构 操作系统(Operator System) 进程 引入 基本概念 描述进程-PCB task_ struct内容分类 进程 ID (PID)和查看进程 进程状态: 进程创建: 进程终止: 进程间通信 (IPC): 冯诺依曼体系结构 冯诺依曼体系结构是现代计算机的基础架构&#xf…

松灵机器人 scout ros2 驱动 安装

必须使用 ubuntu22 必须使用 链接的humble版本 #打开can 口 sudo modprobe gs_usbsudo ip link set can0 up type can bitrate 500000sudo ip link set can0 up type can bitrate 500000sudo apt install can-utilscandump can0mkdir -p ~/ros2_ws/srccd ~/ros2_ws/src git cl…

Excel 技巧23 - 在Excel中用切片器做出查询效果(★★★)

本文讲如何在Excel中用切片器做出查询效果。 目录 1,在Excel中用切片器做出查询效果 1-1,Excel 中的切片器是什么? 1-2,用切片器做出查询效果 1),点击任一表格内单元格,按下CtrlA&#xff0…

Python从0到100(八十六):神经网络-ShuffleNet通道混合轻量级网络的深入介绍

前言: 零基础学Python:Python从0到100最新最全教程。 想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Pyth…

cmd命令行无法进入D:盘怎么办

我找到了一个方法就是 增加一个/d cd /d d: 如下图,我不仅可以进入d盘符下,还可以访问盘符下的文件夹

万物皆有联系:驼鸟和布什

布什?一块布十块钱吗?不是,大家都知道,美国有两个总统,叫老布什和小布什,因为两个布什总统(父子俩),大家就这么叫来着,目的是为了好区分。 布什总统的布什&a…

unity学习24:场景scene相关生成,加载,卸载,加载进度,异步加载场景等

目录 1 场景数量 SceneManager.sceneCount 2 直接代码生成新场景 SceneManager.CreateScene 3 场景的加载 3.1 用代码加载场景,仍然build setting里先加入配置 3.2 卸载场景 SceneManager.UnloadSceneAsync(); 3.3 同步加载场景 SceneManager.LoadScene 3.3.…

在线知识库创建与维护提升企业效率与知识共享能力

内容概要 在当今数字化快速发展的背景下,在线知识库逐渐成为企业管理信息的重要工具。其核心在于将知识进行系统化、结构化的整理和存储,便于员工获取和分享。这不仅提高了信息的访问效率,还促进了团队之间的协作。在线知识库的建立可以有效…

【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】1.24 随机宇宙:生成现实世界数据的艺术

1.24 随机宇宙:生成现实世界数据的艺术 目录 #mermaid-svg-vN1An9qZ6t4JUcGa {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-vN1An9qZ6t4JUcGa .error-icon{fill:#552222;}#mermaid-svg-vN1An9qZ6t4JUc…

DeepSeek-R1 论文解读 —— 强化学习大语言模型新时代来临?

近年来,人工智能(AI)领域发展迅猛,大语言模型(LLMs)为通用人工智能(AGI)的发展开辟了道路。OpenAI 的 o1 模型表现非凡,它引入的创新性推理时缩放技术显著提升了推理能力…

进阶数据结构——高精度运算

目录 前言一、高精度运算的定义与背景二、高精度运算的实现方式三、高精度运算的算法实现四、高精度运算的应用场景五、代码模版(c)六、经典例题1.[高精度加法](https://www.lanqiao.cn/problems/1516/learning/?page1&first_category_id1&name…

MYSQL--一条SQL执行的流程,分析MYSQL的架构

文章目录 第一步建立连接第二部解析 SQL第三步执行 sql预处理优化阶段执行阶段索引下推 执行一条select 语句中间会发生什么? 这个是对 mysql 架构的深入理解。 select * from product where id 1;对于mysql的架构分层: mysql 架构分成了 Server 层和存储引擎层&a…

【4Day创客实践入门教程】Day2 探秘微控制器——单片机与MicroPython初步

Day2 探秘微控制器——单片机与MicroPython初步 目录 Day2 探秘微控制器——单片机与MicroPython初步MicroPython语言基础开始基础语法注释与输出变量模块与函数 单片机基础后记 Day0 创想启程——课程与项目预览Day1 工具箱构建——开发环境的构建Day2 探秘微控制器——单片机…

动态规划每日一练(四)

一、day1——最长数对链 题目链接&#xff1a; 646. 最长数对链 - 力扣&#xff08;LeetCode&#xff09;646. 最长数对链 - 给你一个由 n 个数对组成的数对数组 pairs &#xff0c;其中 pairs[i] [lefti, righti] 且 lefti < righti 。现在&#xff0c;我们定义一种 跟随…

事务02之锁机制

锁机制 文章目录 锁机制一&#xff1a;MySQL锁的由来与分类1&#xff1a;锁机制的分类 二&#xff1a;共享锁与排他锁1&#xff1a;共享锁(S锁)2&#xff1a;排他锁(X锁)3&#xff1a;锁的释放 二&#xff1a;表级别锁1&#xff1a;元数据锁(了解)2&#xff1a;意向锁3&#xf…

网络工程师 (8)存储管理

一、页式存储基本原理 &#xff08;一&#xff09;内存划分 页式存储首先将内存物理空间划分成大小相等的存储块&#xff0c;这些块通常被称为“页帧”或“物理页”。每个页帧的大小是固定的&#xff0c;例如常见的页帧大小有4KB、8KB等&#xff0c;这个大小由操作系统决定。同…

[EAI-026] DeepSeek-VL2 技术报告解读

Paper Card 论文标题&#xff1a;DeepSeek-VL2: Mixture-of-Experts Vision-Language Models for Advanced Multimodal Understanding 论文作者&#xff1a;Zhiyu Wu, Xiaokang Chen, Zizheng Pan, Xingchao Liu, Wen Liu, Damai Dai, Huazuo Gao, Yiyang Ma, Chengyue Wu, Bin…

(动态规划路径基础 最小路径和)leetcode 64

视频教程 1.初始化dp数组&#xff0c;初始化边界 2、从[1行到n-1行][1列到m-1列]依次赋值 #include<vector> #include<algorithm> #include <iostream>using namespace std; int main() {vector<vector<int>> grid { {1,3,1},{1,5,1},{4,2,1}…

cf1000(div.2)

Minimal Coprime最小公倍数 输入&#xff1a; 6 1 2 1 10 49 49 69 420 1 1 9982 44353 输出&#xff1a; 1 9 0 351 1 34371 代码