Effective Python 小笔记之 zip 函数
环境:Python 3.5.1
CentOS 7
zip函数可以同时遍历两个迭代器。
在编写Python代码时,通常要面对很多列表,而这些列表中的对象,可能是相互关联的。如下例:
names = ['Cecilia', 'Lily', 'Maria']length = [len(word) for word in names]
对于上例中的源列表和派生列表,相同索引处有关联关系,以此再引申出一个例子:
longest_name = Nonemax_length = 0for i in range(len(names)):count = length[i]if count > max_length:longest_name = names[i]max_length = countprint(longest_name)>>>Cecilia
以上代码的问题在于,整个循环语句看起来很乱。使用下标来访问names和length会使代码不易阅读。改用enumerate,可以稍稍缓解这个问题,但仍不理想。
for i, name in enumerate(names):count = length[i]if count > max_length:longest_name = namemax_length = count
使用Python内置zip函数,能使上述代码变得简洁。在Python 3 中的zip函数,可以把两个或两个以上的迭代器封装成生成器。这种zip生成器,会从每个迭代器中获取该迭代器的下一个值,然后将这些值汇聚成元组(tuple)。
for name, count in zip(names, length):if count > max_length:longest_name = namemax_length = count
另,Python 3内置的zip函数有一个问题,如果输入的迭代器长度不同,zip会表现的很奇怪。例如,当给names添加一个名字,但没有更新length。现在,如果使用zip同时遍历这两个列表,会产生意外的结果。
names.append('Song')for name, count in zip(names, length):print(name)>>>CeciliaLilyMaria
新元素‘song’并没有出现在遍历结果中。受封装的那些迭代器中,只要一个耗尽, zip 将不再产生元组。若待遍历的迭代器长度不同,那么 zip 会提前终止。若不能确定 zip 封装的列表是否等长,则可考虑使用 itertools 内置模块中的 zip_longest 函数。
转载于:https://blog.51cto.com/jaydenwen/1775017
Effective Python 小笔记之 zip 函数相关推荐
- Python学习笔记---理解zip()函数
转载自Python零碎知识(2):强大的zip 一.代码引导 首先看这一段代码: 1 >>> name=('jack','beginman','sony','pcky')2 > ...
- python enumerate函数_关于python中enumerate和zip函数的用法及举例
关于python中enumerate和zip函数的用法及举例 关于enumerate函数: enumerate函数可以同时返回列表或元组等可迭代对象的下标和内容,但实际上,enumerate函数实际返 ...
- Python小笔记——urllib2得到重定向最终链接
Python小笔记--urllib2得到重定向最终链接 强大的urllib2其实是有处理链接重定向的功能的,但是如何得到跳转最终的链接呢?其实相当简单,做个小笔记,也防止自己忘记了. 接下来用http ...
- python入门笔记——内置函数作业
python入门笔记--内置函数作业 # 求三组连续自然数的和:求出1到10,20到30,35到45的三个和 sum1 = sum(range(1,11)) sum2 = sum(range(20,3 ...
- Python学习笔记11:函数修饰符
Python学习笔记11:函数修饰符 Python有很多有趣的特性,其中函数修饰符就是一个. 我们在之前的那个web应用示例中用过如下写法: @web.route('/log') @符号后边的,就是一 ...
- python基础:并行遍历ZIP()函数介绍
2019独角兽企业重金招聘Python工程师标准>>> 前言 大家都知道range()可以在for循环中使用,这大大的便利了我们,我们今天为大家介绍的就并行遍历ZIP()函数介绍,它 ...
- 【Python】Effective Python 读书笔记
用辅助函数来取代复杂的表达式 P24 表达式如果变得比较复杂,那就应该考虑将其拆解成小块,并把这些逻辑移入辅助函数中.这会另代码更加易读,它比原来那种密集的写法更好.编写Python程序时,不要一味追 ...
- 《Effective Python》笔记
本文介绍了如何进行有效的Python编程,以提高编码质量. 本文主要参考的书籍<Effective Python> [美] Brett Slatkin. 文章目录 用Pythonic方式思 ...
- python学习笔记之自定义函数
live long and prosper 自定义函数 def greet_user():"""现实简单的问候语"""print(" ...
最新文章
- POJ 2253 Frogger(最短路 Floyd)
- 微型计算机技术实验报告,微型计算机技术及应用实验报告.docx
- 33 | 关于 Linux 网络,你必须知道这些(上)
- SaltStack 学习笔记 - 第六篇: 详解Pillar
- 为什么你的应用程序需要崩溃
- Python | 在列表中指定索引处添加元素的程序
- JS HTTP 请求库哪家强?Axios,Request,Superagent,Fetch 还是 Supertest
- c语言实现协议层层消息,纯C语言实现面向对象分析与示例分享.pdf
- 【kafka】kafka kerberos Cannot locate KDC Unable to locate KDC for realm
- UI设计灵感|996打工人必备,日程计划网页设计
- 如何观察JS的事件队列的执行划分
- Atiitt uke发展战略规划十三五规划纲要 attilax总结
- function传值传字符串,然后Ajax url传值的时候传这个装字符串的变量
- java视频教程下载
- 用命令如何返回上级目录
- vue判断当前浏览器为IE低版本,给出升级提示;IE11及其他浏览器正常使用
- 开源项目——寝室助手
- 【情报工具】分享15款保护隐私的搜索引擎
- 计算机图形学常用算法实现11 扫描线z-buffer算法
- Java获取一年有多少周、某周的第一天和最后一天,当前时间所在当年的实际周数