我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python中使用zip函数的七重境界解析

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python中使用zip函数的七重境界解析

1. 引言

Python中有一些内置函数,可以使我们的代码非常优雅。zip 函数就是其中之一,但是zip 函数的使用对于初学者来说不是很直观,有时容易出错。因此本文将从7个层次来由浅入深地来探讨强大的zip 函数的概念、用法和技巧。
闲话少说,我们直接开始吧!

2. Level 0: 了解zip函数基础语法

zip 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的iterator
举例如下,我们可以使用它以如下方式来组合两个列表,样例代码如下:

id = [1, 2, 3, 4]
leaders = ['Elon Mask', 'Tim Cook', 'Bill Gates', 'Bai Li']
record = zip(id, leaders)

print(record)
# <zip object at 0x7f266a707d80>

print(list(record))
# [(1, 'Elon Mask'), (2, 'Tim Cook'), (3, 'Bill Gates'), (4, 'Bai Li')]

如上面的示例所示,zip 函数返回一个元组迭代器,其中第i 个元组包含每个列表中的第i 个元素。

3. Level 1: zip函数同时处理多个对象

事实上,Python中的zip 函数具有强大的功能,比如它可以一次处理任意数量的可迭代项,而不仅仅是两个。

首先,我们来看如果我们将一个list 传递给 zip 函数,样例如下:

id = [1, 2, 3, 4]
record = zip(id)
print(list(record))
# [(1,), (2,), (3,), (4,)]

如果我们同时传递三个list ,结果如下:

id = [1, 2, 3, 4]
leaders = ['Elon Mask', 'Tim Cook', 'Bill Gates', 'Bai Li']
sex = ['m', 'm', 'm', 'm']
record = zip(id, leaders, sex)

print(list(record))
# [(1, 'Elon Mask', 'm'), (2, 'Tim Cook', 'm'), (3, 'Bill Gates', 'm'), (4, 'Bai Li', 'm')]

如上所述,无论我们传递给zip函数多少个可迭代项,它都能按照我们的预期来正常工作。
顺便说一下,如果没有参数,zip 函数只返回一个空的迭代器。

4. Level 2: zip函数处理长度不等的参数

真实数据并不总是干净和完整的,有时我们必须处理不等长的可迭代数据。默认情况下,zip函数的结果基于最短的可迭代项。
举例如下:

id = [1, 2]
leaders = ['Elon Mask', 'Tim Cook', 'Bill Gates', 'Bai Li']
record = zip(id, leaders)

print(list(record))
# [(1, 'Elon Mask'), (2, 'Tim Cook')]

如上面的代码所示,最短的列表是id ,因此record 只包含两个元组,并且忽略了列表leaders 中的最后两个元素。
如果最后两位leader 因被忽视而不高兴,我们该怎么办?
Python将再次帮助我们。itertools 模块中还有一个名为zip_langest 的函数。顾名思义,它是zip函数的兄弟,其结果基于最长的参数。
我们不妨使用zip_langest 函数来生成上述record列表,结果如下:

from itertools import zip_longest
id = [1, 2]
leaders = ['Elon Mask', 'Tim Cook', 'Bill Gates', 'Bai Li']

long_record = zip_longest(id, leaders)
print(list(long_record))
# [(1, 'Elon Mask'), (2, 'Tim Cook'), (None, 'Bill Gates'), (None, 'Bai Li')]

long_record_2 = zip_longest(id, leaders, fillvalue='Top')
print(list(long_record_2))
# [(1, 'Elon Mask'), (2, 'Tim Cook'), ('Top', 'Bill Gates'), ('Top', 'Bai Li')]

如上所述,zip_langest 函数基于其最长参数来返回结果。可选的fillvalue 参数(默认值为None )可以帮助我们填充缺失的值。

5. Level 3: 掌握unzip操作

在上一个示例中,如果我们首先获得列表record ,那么我们如何将其unzip 解压缩为单独的可迭代项?
不幸的是,Python并没有直接的解压缩unzip 函数。然而,如果我们熟悉星号* 的技巧,解压缩将是一项非常简单的任务。

record = [(1, 'Elon Mask'), (2, 'Tim Cook'), (3, 'Bill Gates'), (4, 'Bai Li')]
id, leaders = zip(*record)
print(id)
# (1, 2, 3, 4)
print(leaders)
# ('Elon Mask', 'Tim Cook', 'Bill Gates', 'Bai Li')

在上面的示例中,星号执行了拆包操作,即从记录列表中拆包所有四个元组。

6. Level 4: 通过zip函数创建和更新dict

受益于功能强大的zip 函数,基于一些独立的列表来创建和更新dict 将非常方便。
我们可以使用以下one-line的方案:
● 使用字典生成式和zip函数
● 使用dict和zip函数
样例代码如下:

id = [1, 2, 3, 4]
leaders = ['Elon Mask', 'Tim Cook', 'Bill Gates', 'Bai Li']

# create dict by dict comprehension
leader_dict = {i: name for i, name in zip(id, leaders)}
print(leader_dict)
# {1: 'Elon Mask', 2: 'Tim Cook', 3: 'Bill Gates', 4:'Bai Li'}

# create dict by dict function
leader_dict_2 = dict(zip(id, leaders))
print(leader_dict_2)
# {1: 'Elon Mask', 2: 'Tim Cook', 3: 'Bill Gates', 4: 'Bai Li'}

# update
other_id = [5, 6]
other_leaders = ['Larry Page', 'Sergey Brin']
leader_dict.update(zip(other_id, other_leaders))
print(leader_dict)
# {1: 'Elon Mask', 2: 'Tim Cook', 3: 'Bill Gates', 4: ''Bai Li'', 5: 'Larry Page', 6: 'Sergey Brin'}

上面的示例根本不使用for 循环 , 这是多么的优雅和Pythonic

7. Level 5: 在for循环中使用zip函数

同时处理多个可迭代项通常是常见的场景, 此时我们可以在for循环中配合使用函数zip ,这也是我最喜欢函数zip 的用法之一。
举例如下:

products = ["cherry", "strawberry", "banana"]
price = [2.5, 3, 5]
cost = [1, 1.5, 2]
for prod, p, c in zip(products, price, cost):
    print(f'The profit of a box of {prod} is £{p-c}!')
# The profit of a box of cherry is £1.5!
# The profit of a box of strawberry is £1.5!
# The profit of a box of banana is £3!

8. Level 6: 实现矩阵转置

我们来看以下问题:

如何优雅地实现矩阵的转置操作?

Wow, 鉴于在上文中我们已经介绍了函数zip ,星号* ,以及列表生成式,所以one-line 的实现方式如下:

matrix = [[1, 2, 3], [1, 2, 3]]
matrix_T = [list(i) for i in zip(*matrix)]
print(matrix_T)
# [[1, 1], [2, 2], [3, 3]]

9. 总结

本文重点介绍了Python中功能强大的zip 函数的多种用法,并给出了相应的代码示例。

到此这篇关于Python中使用zip函数的七重境界的文章就介绍到这了,更多相关Python中使用zip函数内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python中使用zip函数的七重境界解析

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python中使用zip函数的七重境界解析

这篇文章主要介绍了Python中使用zip函数的七重境界,重点介绍了Python中功能强大的zip函数的多种用法,并给出了相应的代码示例,需要的朋友可以参考下
2022-12-26

python中的zip函数怎么使用

在Python中,`zip()`函数用于将两个或多个可迭代对象打包成一个元组列表。使用方法如下:```pythonzip(iterable1, iterable2, ...)```其中,`iterable1, iterable2, ...`
2023-08-08

python中的zip函数如何使用

在 Python 中,`zip()` 函数可以用来同时遍历多个可迭代对象,并返回一个元组(tuple)构成的迭代器。`zip()` 函数的基本语法如下:```pythonzip(*iterables)```其中,`*iterables` 是
2023-09-27

Python中的配对函数zip()怎么使用

这篇文章主要介绍“Python中的配对函数zip()怎么使用”,在日常操作中,相信很多人在Python中的配对函数zip()怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python中的配对函数zip
2023-07-04

Python中json.dumps()函数的使用解析

json.dumps将一个Python数据结构转换为JSONimport json data = {'name' : 'myname','age' : 100, } json_str = json.dumps(data)json库的一些用法
2022-06-02

在python中使用zip函数时需要注意的事项

在python中使用zip函数时需要注意的事项?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。python可以做什么Python是一种编程语言,内置了许多有效的工
2023-06-14

解析Python中回调函数的原理及使用方式

Python回调函数的原理和用法解析回调函数是一种常见的编程技术,尤其在Python中被广泛使用。它可以使我们在异步编程中更加灵活地处理事件和执行任务。本文将对回调函数的原理和用法进行详细解析,并提供具体的代码示例。一、回调函数的原理回
解析Python中回调函数的原理及使用方式
2024-02-02

Python中functools模块的常用函数解析

1.partial 首先是partial函数,它可以重新绑定函数的可选参数,生成一个callable的partial对象:>>> int('10') # 实际上等同于int('10', base=10)和int('10', 10) 10
2022-06-04

python中pandas库的iloc函数用法解析

在Pandas中,.iloc是一种用于基于整数位置进行索引的属性,可以用于获取DataFrame或Series中的数据,这篇文章主要介绍了python中pandas库的iloc函数用法,需要的朋友可以参考下
2023-05-19

深入解析Python中函数的参数与作用域

传递参数 函数传递参数时的一些简要的关键点:参数的传递是通过自动将对象赋值给本地变量名来实现的。所有的参数实际上都是通过指针进行传递的,作为参数被传递的对象从来不自动拷贝。在函数内部的参数名的赋值不会影响调用者。改变函数的可变对象参数的值会
2022-06-04

Python中 join() 函数的使用示例讲解

Python中有join()和os.path.join()两个函数,这篇文章主要介绍了Python中 join() 函数的使用方法,需要的朋友可以参考下
2023-05-14

Python max函数中key的用法及原理解析

目录一、背景二、原理三、用法四、实例一、背景 起源于一个问题:怎样找到字符串中出现次数最多的字符 其实使用max函数就能很轻松的解决这个问题: 代码:str1 = "AAAaaa8888899sssss" print(max(str1, k
2022-06-02

函数重写示例解析:实战案例中的应用精髓

问题:如何扩展现有函数以满足新需求而无需修改原始函数?解决方案:使用函数重写:1. 创建一个继承原始函数特性的新函数,并提供更新的处理逻辑。2. 在系统中使用新函数处理特定情况,而原始函数继续处理其他情况。优点:可扩展性,隔离性,可重用性。
函数重写示例解析:实战案例中的应用精髓
2024-05-03

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录