【python基础】python内置函数 zip用法介绍

news2025/1/11 23:22:33

zip() 是 Python 中非常有用的内建函数,能够将多个可迭代对象(如列表、元组、字符串等)打包成一个迭代器,它将对应位置的元素组合成元组,并返回一个由这些元组组成的迭代器。通常用于并行处理多个可迭代对象。

1. 基本用法

zip() 可以将两个或多个可迭代对象的元素“打包”成一个个元组,返回一个新的迭代器。

# 示例1:将两个列表打包成元组
list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']
zipped = zip(list1, list2)

# 转换为列表查看结果
print(list(zipped))  # 输出: [(1, 'a'), (2, 'b'), (3, 'c')]

2. 多个可迭代对象

zip() 可以接受多个可迭代对象,它会按位置依次打包这些可迭代对象中的元素。

list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']
list3 = ['A', 'B', 'C']
zipped = zip(list1, list2, list3)

print(list(zipped))  # 输出: [(1, 'a', 'A'), (2, 'b', 'B'), (3, 'c', 'C')]

3. 处理不同长度的可迭代对象

如果传递给 zip() 的可迭代对象长度不同,zip() 会使用最短的可迭代对象的长度来进行配对,忽略多余的元素。

list1 = [1, 2, 3, 4]
list2 = ['a', 'b']
zipped = zip(list1, list2)

print(list(zipped))  # 输出: [(1, 'a'), (2, 'b')]

4. 解压(unzip)操作

zip() 不仅可以用于打包,还可以通过使用 * 操作符将打包的数据解压为原始的可迭代对象。这是通过 zip(*iterable) 完成的。

# 使用 zip 打包
zipped = [(1, 'a'), (2, 'b'), (3, 'c')]

# 使用 * 进行解压
unzipped = zip(*zipped)

# 转换为列表查看结果
unzipped_list = list(unzipped)
print(unzipped_list)  # 输出: [(1, 2, 3), ('a', 'b', 'c')]

解压后的结果是两个元组:一个包含所有第一个元素,另一个包含所有第二个元素。

5. 结合 zip()dict() 创建字典

zip() 可以用来将两个列表(一个作为键,另一个作为值)结合成一个字典。

keys = ['name', 'age', 'city']
values = ['Alice', 25, 'New York']

# 使用 zip 和 dict 创建字典
result = dict(zip(keys, values))
print(result)  # 输出: {'name': 'Alice', 'age': 25, 'city': 'New York'}

6. zip()for 循环

zip()for 循环中非常有用,可以让你同时遍历多个可迭代对象。

list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']

for number, letter in zip(list1, list2):
    print(f"Number: {number}, Letter: {letter}")
# 输出:
# Number: 1, Letter: a
# Number: 2, Letter: b
# Number: 3, Letter: c

7. zip()enumerate() 结合使用

zip()enumerate() 可以结合使用,enumerate() 会为每个元素提供一个索引。

list1 = ['apple', 'banana', 'cherry']
list2 = ['red', 'yellow', 'pink']

for index, (fruit, color) in enumerate(zip(list1, list2)):
    print(f"Index: {index}, Fruit: {fruit}, Color: {color}")
# 输出:
# Index: 0, Fruit: apple, Color: red
# Index: 1, Fruit: banana, Color: yellow
# Index: 2, Fruit: cherry, Color: pink

8. zip() 用于矩阵转置

zip() 很适合用来转置矩阵,它可以把行转换为列,列转换为行。

matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]

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

9. zip_longest 处理不等长的可迭代对象

zip() 默认会按最短的可迭代对象来配对元素。如果需要填充空缺,可以使用 itertools.zip_longest(),它会为较短的可迭代对象使用指定的填充值。

from itertools import zip_longest

list1 = [1, 2, 3, 4]
list2 = ['a', 'b']

# 使用 zip_longest 填充空缺
zipped = zip_longest(list1, list2, fillvalue='N/A')
print(list(zipped))  # 输出: [(1, 'a'), (2, 'b'), (3, 'N/A'), (4, 'N/A')]

10. 总结

  • zip() 可以将多个可迭代对象按元素位置打包成元组,返回一个新的迭代器。
  • 当可迭代对象长度不一致时,zip() 只会遍历最短的可迭代对象。
  • 可以使用 * 解压 zip 打包的数据。
  • zip() 常用于创建字典、并行迭代、矩阵转置等场景。

如果你在实际编程中遇到其他关于 zip() 的问题,或者有其他的 Python 相关问题,随时可以继续询问!

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

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

相关文章

金融项目实战 02|接口测试分析、设计以及实现

目录 ⼀、接口相关理论 二、接口测试 1、待测接口:投资业务 2、接口测试流程 3、设计用例理论 1️⃣设计方法 2️⃣工具 4、测试点提取 5、测试用例(只涉及了必测的) 1️⃣注册图⽚验证码、注册短信验证码 2️⃣注册 3️⃣登录 …

74 mysql having 的实现

前言 这里 我们主要是 看一下 having 的相关实现 having 经常是配合 group by 这边进行使用, 进行一个基于 group by 之后的结果的一个, 条件限定 我们这里 以最简单的 group by having 来进行调试, 他会分为 两个阶段, 一个阶段是 group by 之后的结果输出到临时表, 另外…

Google发布图像生成新工具Whisk:无需复杂提示词,使用图像和人工智能将想法可视化并重新混合

Whisk 是 Google Labs 的一项新实验,可使用图像进行快速而有趣的创作过程。Whisk不会生成带有长篇详细文本提示的图像,而是使用图像进行提示。只需拖入图像,即可开始创建。 whisk总结如下: Whisk 是 Google 实验室最新的生成图像实…

K8s Pod OOMKilled,监控却显示内存资源并未打满

1. 问题现象 pod一直重启,通过grafana查看,发现内存使用率并没有100%。 2. 排查过程 2.1 describe查看pod最新一次的状态 可以明显看到,最近一次的重启就是因为内存不足导致的。 2.2 describe 查看node节点状态 找到原因了,原来…

33.3K 的Freqtrade:开启加密货币自动化交易之旅

“ 如何更高效、智能地进行交易成为众多投资者关注的焦点。” Freqtrade 是一款用 Python 编写的免费开源加密货币交易机器人。它就像一位不知疲倦的智能交易助手,能够连接到众多主流加密货币交易所,如 Binance、Bitmart、Bybit 等(支…

vscode开启调试模式,结合Delve调试器调试golang项目详细步骤

1.前期准备 (1).在vs code中的扩展程序中搜索并安装Go扩展程序 (2).安装 Delve 调试器 go install github.com/go-delve/delve/cmd/dlvlatest (3).打开vs code的命令面板,输入Go: Install/Update Tools,并单击该命令执行,安装或更新Go语…

Postman接口测试03|执行接口测试、全局变量和环境变量、接口关联、动态参数、断言

目录 七、Postman 1、安装 2、postman的界面介绍 八、Postman执行接口测试 1、请求页签 3、响应页签 九、Postman的环境变量和全局变量 1、创建环境变量和全局变量可以解决的问题 2、postman中的操作-全局变量 1️⃣手动设置 2️⃣代码设置 3️⃣界面获取 4️⃣代…

Python Matplotlib教程-Matplotlib 多子图布局

Python Matplotlib 多子图布局 Matplotlib 是 Python 中最常用的数据可视化库,它提供了强大的功能来绘制不同类型的图表。在实际应用中,通常需要将多个图表绘制在同一个画布上,这就需要用到 多子图布局。本篇文章将详细介绍如何使用 Matplot…

【Java项目】基于SpringBoot的【校园新闻系统】

【Java项目】基于SpringBoot的【校园新闻系统】 技术简介:本系统使用采用B/S架构、Spring Boot框架、MYSQL数据库进行开发设计。 系统简介:主要包括二大功能模块,即用户功能模块和管理员功能模块。系统中的核心用户是管理员,管理员…

c++入门之 命名空间与输入输出

1、命名空间 1.1使用命名空间的原因 先看一个例子&#xff1a; #include <iostream>int round 0;int main() {printf("%d", round);return 0; }请问&#xff0c;这个程序能跑起来吗&#xff1f; 答案是否定的 原因是&#xff0c;当我们想创建一个全局变量 …

【网络安全渗透测试零基础入门】之XSS攻击获取用户cookie和用户密码(实战演示)

前言 大家好&#xff0c;我是demon 这是demon给粉丝盆友们整理的网络安全渗透测试入门阶段XSS攻击教程。 本阶段主要讲解XSS攻击获取用户cookie和用户密码。 喜欢的朋友们&#xff0c;记得给晓晓点赞支持和收藏一下&#xff0c;关注我&#xff0c;学习黑客技术。 简介 该…

HarmonyOS开发:ArkTS初识

ArkTS基本语法 ArkTS语言简介 ArkTS是鸿蒙生态的应用开发语言。基本语法风格与TypeScript&#xff08;简称TS&#xff09;相似&#xff0c;在TS的生态基础上进一步扩展&#xff0c;继承了TS的所有特性&#xff0c;是TS的超集。 基本语法概述 扩展能力 基础语法&#xff1a…

【YOLOv8杂草作物目标检测】

YOLOv8杂草目标检测 算法介绍模型和数据集下载 算法介绍 YOLOv8在禾本科杂草目标检测方面有显著的应用和效果。以下是一些关键信息的总结&#xff1a; 农作物幼苗与杂草检测系统&#xff1a;基于YOLOv8深度学习框架&#xff0c;通过2822张图片训练了一个目标检测模型&#xff…

【python A* pygame 格式化 自定义起点、终点、障碍】

- pip install pygame test.py(chatgpt版本) 空格键&#xff1a;运行 A* 算法。CtrlC 键&#xff1a;清空路径。CtrlS 键&#xff1a;保存当前地图到 map.json 文件。CtrlL 键&#xff1a;从 map.json 文件加载地图。 import pygame import json from queue import PriorityQ…

xfs扩容目录lvm

pve增加磁盘&#xff1a; -bash-4.2# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 50G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 49G 0 part ├─centos-root 253:0 …

Pathview包:整合表达谱数据可视化KEGG通路

Pathview是一个用于整合表达谱数据并用于可视化KEGG通路的一个R包&#xff0c;其会先下载KEGG官网上的通路图&#xff0c;然后整合输入数据对通路图进行再次渲染&#xff0c;从而对KEGG通路图进行一定程度上的个性化处理&#xff0c;并且丰富其信息展示。&#xff08;KEGG在线数…

汽车免拆诊断 | 2007款保时捷Carrera S车行驶中发动机冷却液温度报警灯异常点亮

故障现象 一辆2007款保时捷Carrera S车&#xff0c;搭载3.8 L自然吸气发动机&#xff0c;累计行驶里程约为7.8万km。车主反映&#xff0c;车辆行驶一段距离后&#xff0c;组合仪表上的发动机冷却液温度报警灯异常点亮。为此&#xff0c;在其他维修厂已更换过节温器、发动机冷却…

【PPT解密】ppt只读文档怎么改成可编辑文档

PPT文档打开是只读模式&#xff0c;如何改成可编辑文档呢&#xff1f;这需要分几种情况来说&#xff0c;所以今天将介绍几种方法帮助PPT只读文档改为可编辑文档。 方法一&#xff1a; 我们可以先查看一下文件属性&#xff0c;属性中有只读属性&#xff0c;当我们打开文档之后…

[java基础-集合篇]优先队列PriorityQueue结构与源码解析

优先队列PriorityQueue 优先级队列表示为平衡二进制堆&#xff1a; queue[n] 的两个子级是 queue[2*n1] 和 queue[2*&#xff08;n1&#xff09;]。 注&#xff1a;左子节点index2*parentIndex1,右子节点index2*parentIndex2,源码中计算parent位置时就是这样反过来计算的 优…

ROS2+OpenCV综合应用--11. AprilTag标签码跟随

1. 简介 apriltag标签码追踪是在apriltag标签码识别的基础上&#xff0c;增加了小车车体运动的功能&#xff0c;控制车体从而使摄像头会保持标签码在视觉中间左右运动&#xff0c;在根据物体在摄像头成像近大远小的原理根据这一特性&#xff0c;从而实现标签码跟随功能。 2. 启…