python 3.8.5 打包_Python中减少代码量的两个内置函数

点击上方蓝字“Python圈子”,进行关注~

1

前言

Python中内置了几个非常好用的函数。

当你掌握了这几个函数的用法后,有些场景下,不用自己去实现多余的冗余代码编写,只需要调用这些函数,便能很简短的帮你实现功能。

今天来分享下两个函数的场景以及用法。

PS:下例子截图演示均在 jupyter notebook 中完成。

2

enumerate enumerate,单词是枚举的意思。 枚举是什么意思呢?来看下 Java 中的枚举,直接选自百度提问。这个例子举得比较生动。 edec74acefd04eb90efc90523d5add82.png 在你理解了枚举的意思后,来看下 Python 中枚举函数的使用场景。 场景: 在 Python 中,我们想去遍历一个 list 列表,有哪种方式可以将列表中的元素全部打印出来呢? 假设现在有个 list ,其中包含了 1 - 5 五个数字,用程序将每个元素打印出来。
number_list = [1,2,3,4,5]
自行思考下,再继续往后看。 方法一,直接 for 循环:
for num in number_list:    print(num)
方法二, for + range() + len():
for i in range(len(number_list)):    print(number_list[i])
不管哪种方式,你最终都能得到如下结果: 3ee15935eb563a1741e946e18e91772d.png 如果,现在让你将列表中的每个元素和它对应的索引位置打印出来,如何做到?依然是自行思考下,再往后看。 是不是直接用第一种方法 for...in list 的方式,显然不能完成。 而第二种方法可以完成,只需要如下: e64b69214426aa93989a6806c3fe9a36.png 但是这种方式是否觉得非常麻烦?你写的代码既套用 range ,又需要套用 len, 过于冗长。 此时,Python 内置函数 enumerate 完美的解决了这个场景下问题。
for i,num in enumerate(number_list):    print(f'当前索引位置:{i}')    print(f'当前元素:{num}')
2c309c7b959153a54694039456164f1a.png 对比下两种方式,相信你会爱上第二种写法: aa8e78b27e0c1d5bb62397cf245de5cf.png 用 enumerate 函数,遍历出来的第一个变量是索引位置,第二个是结果,这二者顺序不可颠倒,第一个变量一定是 int 类型的数字。至于变量的名字,想叫什么叫什么,没有影响。 例子中 i,num 。你也可以替换成别的。 记住场景,就容易想到 enumerate 函数了,当你遍历序列时,既想要序列对应索引位置,又想要序列中的内容,选它,enumerate() ! 还记得序列的概念吗?就是能遍历的类型。

3

zip 看到 zip 这个单词时,但凡用过压缩包的同学都不陌生吧。 我们经常会看到,许多文件都是 xxx.zip 的文件格式,即压缩包。 有了上述理解,来看下 zip 的场景。 场景: 有个男士列表,里面分别是 黄晓明,刘恺威,贾乃亮。 有个女士列表,里面分别是 杨颖,杨幂,李小璐。 能看出来,男士列表和女士列表,都是按照顺序配对写的。 如果将两个 list 中的对应元素,将他们取出来组合成夫妻呢?
man_list = ['黄晓明','刘恺威','贾乃亮']woman_list = ['杨颖','杨幂','李小璐']
想要的结果:
[('黄晓明','杨颖'),('刘恺威','杨幂'),('贾乃亮','李小璐')]
自行思考,正常我们需要怎么做,才能实现? 正常逻辑:
for i in range(len(man_list)):    couple_list.append((man_list[i],woman_list[i]))print(couple_list)
遍历第一个元素列表,获取到索引的同时,将男女列表此时的索引元素组成元组,放入到 couple_list 中。 7501af80fd1f7f798bd6dfd1e737788d.png 看下我们的 zip 函数: zip 可以将多个列表、元组或其它序列成对组合成一个元组列表。 所以,你只需要完美的将两个元素传入,最终转为 list 即可:
couple_zip_list = list(zip(man_list,woman_list))print(couple_zip_list)
6b1656b37dfaa7a37290a59bb405bc94.png 什么叫做简洁?一行代码搞定,有木有觉得就是这么 easy 啊! 别急,正常场景,一般不会这么巧的给你两个同等元素列表,假设还有另外一个列表,我们将其定义为是否有孩子列表吧。 关注娱乐的朋友都知道,其实这三对夫妻都已经有孩子了,分别叫小海绵,小糯米,贾云馨
man_list = ['黄晓明','刘恺威','贾乃亮']woman_list = ['杨颖','杨幂','李小璐']has_child = [True,True]
现在有三个列表,依然是顺序打包组合。最后来猜猜结果会如何呢? 9b28f2f7ba3c57fdda319bd3153150ba.png 看到,结果没有最后一对夫妻的结果了。。。 zip 虽然可以处理任意多的序列,但最终元素的个数取决于最短的序列。 逆向思维一下,如果 zip 能正向打包,是否可以逆向解包呢? 答案,当然是可以!zip解包 确实很神奇。
man_tuple,woman_tuple = zip(*couple_list)
注意,解包出来的类型是 tuple 而不是 listb3469759307dc3d0ccf95d8f5127baf8.png

4

组合打法 上述介绍的两个函数,可以结合使用,形成终极大招: 场景: 假设三人同时在一场婚礼上举办。
man_list = ['黄晓明', '刘恺威', '贾乃亮']woman_list = ['杨颖', '杨幂', '李小璐']
此时牧师要一次宣讲,第几对新人,男方是谁,女方是谁。。打印如下:
当前第1对夫妻: 男方:黄晓明, 女方:杨颖
所以,结合场景,组合今天介绍的 enumerate 和 zip 这样使用,就能让牧师完美的讲出来。
for i, (man, woman) in enumerate(zip(man_list, woman_list)):    print(f'当前第{i+1}对夫妻: 男方:{man}, 女方:{woman}')
22a2f720362c58e6bfd7091a2426743b.png

5

总结 好了,简单的回顾总结一下今天的内容。 第一个 enumerate 函数的场景,什么时候会用到? 当你既想要序列中的索引坐标,又想要内容的时候!注意顺序。 第二个 zip 函数的场景,什么时候会用到? 当你需要对多个序列同时进行遍历的时候,用 zip 会省不少事! 特定场景下,结合两种方法使用,可以达到神奇的效果。 总之,这两种内置方法从使用角度来讲,大大的降低了代码编写的复杂度,非常友好。 关于今天分享的内容就到这里啦,你学会了嘛?有什么问题,可以评论区留言探讨呐!smiley_63.pngsmiley_63.png
-END-

◆ Python入门 —— 29个操作难点(新手必看)

◆ 程序员的八荣八耻

◆ 程序员泪崩瞬间

◆ 黑客们会用到哪些Python技术?

◆ 用 Python 爬取B站视频

扫描下方二维码  添加微信好友

免费领取视频、电子书资源

01695842d8599ecdbdb06065c25e0244.png

微信号:wulishinian
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值