python中itertools模块zip_longest函数详解


Posted in Python onJune 12, 2018

最近在看流畅的python,在看第14章节的itertools模块,对其itertools中的相关函数实现的逻辑的实现

其中在zip_longest(it_obj1, ..., it_objN, fillvalue=None)时,其函数实现的功能和内置zip函数大致相同(实现一一对应),

不过内置的zip函数是已元素最少对象为基准,而zip_longest函数是已元素最多对象为基准,使用fillvalue的值来填充

以下是自己总结此函数的大致实现方法,和官方方法不同:

思路大致如此: 找出元素个数最多 ==>算出元素个数差值==>填充差值个元素到各个对象

def zip_longest(*it, **kwargs):
  its = {k: len(k) for k in it}   # 这里我是用字典把参数对象和参数的元素个数结果作为一个字典
  max_num = max(its.values())    # 确定迭代对象元素最大值 
  result = []            # 
  fillvalue = kwargs.get('fillvalue', None) # 元素较少的填充值
  for x in range(max_num):     # 已最大次为基准循环
    result = []
    for it in its:        # 循环所有迭代对象,以便进行填充数据
      element = list(it)    # 将
      if len(it) < max_num:   # 如果迭代对象的元素个数比最大值小,则要填充数据
        for i in range(max_num - len(it)): # 此为要填充数据的个数
          element.append(fillvalue)    # 填充操作,完成后所有的迭代对象的元素个数都为一致    
      result.append(element[x])        # 生成一一对应结果,存放到list中
    yield tuple(result)             # 将结果输出

测试其结果:

res = zip_longest('abc', '12')
for x in res:
  print(x)

结果为:

('a', '1')
('b', '2')
('c', None)

Python 相关文章推荐
在树莓派2或树莓派B+上安装Python和OpenCV的教程
Mar 30 Python
Python Sql数据库增删改查操作简单封装
Apr 18 Python
Python使用smtplib模块发送电子邮件的流程详解
Jun 27 Python
Python正规则表达式学习指南
Aug 02 Python
Python基础教程之利用期物处理并发
Mar 29 Python
Python正则表达式急速入门(小结)
Dec 16 Python
Python图片处理模块PIL操作方法(pillow)
Apr 07 Python
Python判断三段线能否构成三角形的代码
Apr 12 Python
django 解决model中类写不到数据库中,数据库无此字段的问题
May 20 Python
python实现扫雷游戏的示例
Oct 20 Python
Python 数据可视化之Bokeh详解
Nov 02 Python
Python可变集合和不可变集合的构造方法大全
Dec 06 Python
Python subprocess模块常见用法分析
Jun 12 #Python
python 基本数据类型占用内存空间大小的实例
Jun 12 #Python
Python中.join()和os.path.join()两个函数的用法详解
Jun 11 #Python
使用Python进行QQ批量登录的实例代码
Jun 11 #Python
python中使用psutil查看内存占用的情况
Jun 11 #Python
Python运维之获取系统CPU信息的实现方法
Jun 11 #Python
python 实时得到cpu和内存的使用情况方法
Jun 11 #Python
You might like
收集的php编写大型网站问题集
2007/03/06 PHP
php FPDF类库应用实现代码
2009/03/20 PHP
php 防止表单重复提交两种实现方法
2016/11/03 PHP
jQuery 性能优化指南(3)
2009/05/21 Javascript
学习JS面向对象成果 借国庆发布个最新作品与大家交流
2009/10/03 Javascript
js生成缩略图后上传并利用canvas重绘
2014/05/15 Javascript
JavaScript DOM节点添加示例
2014/07/16 Javascript
js实现九宫格图片半透明渐显特效的方法
2015/02/16 Javascript
基于JS2Image实现圣诞树代码
2015/12/24 Javascript
js实现文字垂直滚动和鼠标悬停效果
2015/12/31 Javascript
JavaScript tab选项卡插件实例代码
2016/02/23 Javascript
BOM系列第三篇之定时器应用(时钟、倒计时、秒表和闹钟)
2016/08/17 Javascript
Javascript中内建函数reduce的应用详解
2016/10/20 Javascript
正则表达式替换html元素属性的方法
2016/11/26 Javascript
jquery 仿锚点跳转到页面指定位置的实例
2017/02/14 Javascript
JS实现中文汉字按拼音排序的方法
2017/10/09 Javascript
详解使用jQuery.i18n.properties实现js国际化
2018/05/04 jQuery
Vue实现一个无限加载列表功能
2018/11/13 Javascript
小程序关于请求同步的总结
2019/05/05 Javascript
jquery实现有过渡效果的tab切换
2020/07/17 jQuery
[01:02:32]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD BO3 第二场 2月26日
2021/03/11 DOTA
python中xrange用法分析
2015/04/15 Python
Python ftp上传文件
2016/02/13 Python
Python的collections模块中namedtuple结构使用示例
2016/07/07 Python
Python Pexpect库的简单使用方法
2019/01/29 Python
tensorflow 限制显存大小的实现
2020/02/03 Python
浅谈Python里面None True False之间的区别
2020/07/09 Python
PyChon中关于Jekins的详细安装(推荐)
2020/12/28 Python
英国排名第一的在线宠物用品商店:Monster Pet Supplies
2018/05/20 全球购物
美国医生配方营养补充剂供应商:Healthy Directions
2019/07/10 全球购物
金融行业务员的自我评价
2013/12/13 职场文书
经典婚礼主持词
2014/03/13 职场文书
2014党员学习兰辉先进事迹思想汇报
2014/09/17 职场文书
秋菊打官司观后感
2015/06/03 职场文书
民事调解协议书
2016/03/21 职场文书
浅谈react useEffect闭包的坑
2021/06/08 Javascript