环境: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 函数相关推荐

  1. Python学习笔记---理解zip()函数

    转载自Python零碎知识(2):强大的zip 一.代码引导 首先看这一段代码: 1 >>> name=('jack','beginman','sony','pcky')2 > ...

  2. python enumerate函数_关于python中enumerate和zip函数的用法及举例

    关于python中enumerate和zip函数的用法及举例 关于enumerate函数: enumerate函数可以同时返回列表或元组等可迭代对象的下标和内容,但实际上,enumerate函数实际返 ...

  3. Python小笔记——urllib2得到重定向最终链接

    Python小笔记--urllib2得到重定向最终链接 强大的urllib2其实是有处理链接重定向的功能的,但是如何得到跳转最终的链接呢?其实相当简单,做个小笔记,也防止自己忘记了. 接下来用http ...

  4. python入门笔记——内置函数作业

    python入门笔记--内置函数作业 # 求三组连续自然数的和:求出1到10,20到30,35到45的三个和 sum1 = sum(range(1,11)) sum2 = sum(range(20,3 ...

  5. Python学习笔记11:函数修饰符

    Python学习笔记11:函数修饰符 Python有很多有趣的特性,其中函数修饰符就是一个. 我们在之前的那个web应用示例中用过如下写法: @web.route('/log') @符号后边的,就是一 ...

  6. python基础:并行遍历ZIP()函数介绍

    2019独角兽企业重金招聘Python工程师标准>>> 前言 大家都知道range()可以在for循环中使用,这大大的便利了我们,我们今天为大家介绍的就并行遍历ZIP()函数介绍,它 ...

  7. 【Python】Effective Python 读书笔记

    用辅助函数来取代复杂的表达式 P24 表达式如果变得比较复杂,那就应该考虑将其拆解成小块,并把这些逻辑移入辅助函数中.这会另代码更加易读,它比原来那种密集的写法更好.编写Python程序时,不要一味追 ...

  8. 《Effective Python》笔记

    本文介绍了如何进行有效的Python编程,以提高编码质量. 本文主要参考的书籍<Effective Python> [美] Brett Slatkin. 文章目录 用Pythonic方式思 ...

  9. python学习笔记之自定义函数

    live long and prosper 自定义函数 def greet_user():"""现实简单的问候语"""print(" ...

最新文章

  1. POJ 2253 Frogger(最短路 Floyd)
  2. 微型计算机技术实验报告,微型计算机技术及应用实验报告.docx
  3. 33 | 关于 Linux 网络,你必须知道这些(上)
  4. SaltStack 学习笔记 - 第六篇: 详解Pillar
  5. 为什么你的应用程序需要崩溃
  6. Python | 在列表中指定索引处添加元素的程序
  7. JS HTTP 请求库哪家强?Axios,Request,Superagent,Fetch 还是 Supertest
  8. c语言实现协议层层消息,纯C语言实现面向对象分析与示例分享.pdf
  9. 【kafka】kafka kerberos Cannot locate KDC Unable to locate KDC for realm
  10. UI设计灵感|996打工人必备,日程计划网页设计
  11. 如何观察JS的事件队列的执行划分
  12. Atiitt uke发展战略规划十三五规划纲要 attilax总结
  13. function传值传字符串,然后Ajax url传值的时候传这个装字符串的变量
  14. java视频教程下载
  15. 用命令如何返回上级目录
  16. vue判断当前浏览器为IE低版本,给出升级提示;IE11及其他浏览器正常使用
  17. 开源项目——寝室助手
  18. 【情报工具】分享15款保护隐私的搜索引擎
  19. 计算机图形学常用算法实现11 扫描线z-buffer算法
  20. Java获取一年有多少周、某周的第一天和最后一天,当前时间所在当年的实际周数

热门文章

  1. Squid服务在实际工作中的应用、优化和流量监控
  2. jquery如何调用后台的方法
  3. 面向对象方法为何有利于软件复用?
  4. .NETCore 下支持分表分库、读写分离的通用 Repository
  5. java中的二进制运算简单理解
  6. ubuntu系统初始化
  7. Spring IOC 之 加载 Bean
  8. (.DS_Store)避免多人提交代码到GitHub上起冲突
  9. 大型分布式网站架构技术总结
  10. drupal7获取当前路径别名