当前位置: 首页 > news >正文

python zip() 函数的用法

在 Python 里,zip() 函数能够把多个可迭代对象(像列表、元组、字符串等)中对应的元素组合成元组,最终返回一个由这些元组构成的迭代器。下面为你详细介绍它的用法:

基本语法

zip(*iterables)

这里的 *iterables 表示接受多个可迭代对象作为参数。

简单示例

下面展示了如何使用 zip() 函数将两个列表进行配对:

names = ['Alice', 'Bob', 'Charlie']
ages = [25, 30, 35]zipped = zip(names, ages)
print(list(zipped))  # 输出:[('Alice', 25), ('Bob', 30), ('Charlie', 35)]

当有多个可迭代对象时,zip() 函数会从每个可迭代对象中依次取出元素,组合成元组。

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

若可迭代对象的长度不一致,zip() 会以最短的可迭代对象为标准来截断结果:

names = ['Alice', 'Bob']  # 长度为 2
ages = [25, 30, 35]       # 长度为 3zipped = zip(names, ages)
print(list(zipped))  # 输出:[('Alice', 25), ('Bob', 30)]

解压操作

借助 * 操作符和 zip() 函数,可以实现对已组合的元素进行解压:

pairs = [('Alice', 25), ('Bob', 30)]
names, ages = zip(*pairs)print(names)  # 输出:('Alice', 'Bob')
print(ages)   # 输出:(25, 30)

与循环结合使用

在循环中,zip() 函数非常实用,能够同时遍历多个可迭代对象:

names = ['Alice', 'Bob', 'Charlie']
ages = [25, 30, 35]for name, age in zip(names, ages):print(f"{name} is {age} years old.")# 输出:
# Alice is 25 years old.
# Bob is 30 years old.
# Charlie is 35 years old.

处理多个可迭代对象

zip() 函数可以处理任意数量的可迭代对象:

names = ['Alice', 'Bob', 'Charlie']
ages = [25, 30, 35]
cities = ['New York', 'London', 'Paris']zipped = zip(names, ages, cities)
print(list(zipped))
# 输出:[('Alice', 25, 'New York'), ('Bob', 30, 'London'), ('Charlie', 35, 'Paris')]

使用 itertools.zip_longest

要是你希望在处理不同长度的可迭代对象时,以最长的对象为标准,缺失的部分用指定值填充,可以使用 itertools.zip_longest(在 Python 2 中名为 izip_longest):

from itertools import zip_longestnames = ['Alice', 'Bob']  # 长度为 2
ages = [25, 30, 35]       # 长度为 3zipped = zip_longest(names, ages, fillvalue=None)
print(list(zipped))  # 输出:[('Alice', 25), ('Bob', 30), (None, 35)]

注意事项

  1. 返回的是迭代器:在 Python 3 中,zip() 返回的是一个迭代器,这意味着它是惰性求值的。如果需要将结果存储下来或者多次使用,建议将其转换为列表(如 list(zip(...)))。
  2. 内存效率高:由于 zip() 返回的是迭代器,在处理大规模数据时,它的内存效率更高。
  3. 元素顺序zip() 函数会按照可迭代对象中元素的原有顺序进行组合。
http://www.xdnf.cn/news/1054009.html

相关文章:

  • 《一元线性回归:从基础到应用及模型处理》
  • centos7安装weblogic
  • linux多线程之线程基础
  • ATSAMV71Q21B基于Microchip Studio以及ASF4.0架构使用printf打印float类型
  • 超标量处理器设计9-执行
  • 647. 回文子串
  • AI驱动SEO关键词精准布局
  • PMP成本管理时,合同成本的计算和注意事项
  • 耗时3小时,把这两天做好的爬虫程序,用Python封装成exe文件
  • 构建高性能日志系统:QGroundControl日志模块深度解析
  • 【JavaEE】(2) 多线程1
  • 第3章 C#编程概述 笔记
  • 计算机求职提前批/求职什么时候投递合适
  • 宝塔部署.net项目(nopcommerce)
  • K-Means算法详细解析:从原理到实践
  • C++ STL常用二分查找算法
  • 2025年品牌定位推荐排行榜:锚定市场航向,解锁品牌增长新势能
  • Python+QT远程控制助手-ver2
  • 《注解的江湖:一场元数据的“宫斗剧”》
  • 每日算法刷题Day32 6.15:leetcode枚举技巧7道题,用时1h10min
  • 计网复习知识(17)应用层
  • jQuery 3D透明蓄水池状柱状图插件
  • IDA动态调试环境配置全流程
  • 【Markdown】基础用法汇总(标题、列表、链接、图片、加粗斜体、上下角标、引用块、代码块、公式)
  • 学习日记-day30-6.15
  • Linux安装LLaMA Factory
  • Netty 全面深入学习指南
  • 项目实训个人工作梳理
  • 【算法 day03】LeetCode 203.移除链表元素 | 707.设计链表 | 206.反转链表
  • nodejs中Express框架的基本使用