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 相关文章推荐
Python下rrdtool模块的基本使用方法
Nov 13 Python
Python for Informatics 第11章之正则表达式(四)
Apr 21 Python
Python常用时间操作总结【取得当前时间、时间函数、应用等】
May 11 Python
Python常见异常分类与处理方法
Jun 04 Python
windows下python和pip安装教程
May 25 Python
浅析python的Lambda表达式
Feb 27 Python
python使用writerows写csv文件产生多余空行的处理方法
Aug 01 Python
PyTorch: Softmax多分类实战操作
Jul 07 Python
Python基于Serializer实现字段验证及序列化
Nov 04 Python
Python机器学习工具scikit-learn的使用笔记
Jan 28 Python
使用Djongo模块在Django中使用MongoDB数据库
Jun 20 Python
你需要掌握的20个Python常用技巧
Feb 28 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
不用iconv库的gb2312与utf-8的互换函数
2006/10/09 PHP
php download.php实现代码 跳转到下载文件(response.redirect)
2009/08/26 PHP
删除无限分类并同时删除它下面的所有子分类的方法
2010/08/08 PHP
PHP读取汉字的点阵数据
2015/06/22 PHP
PHP 生成微信红包代码简单
2016/03/25 PHP
PHP使用strrev翻转中文乱码问题的解决方法
2017/01/13 PHP
修改jquery里的dialog对话框插件为框架页(iframe) 的方法
2010/09/14 Javascript
地址栏传递中文参数乱码在js里用escape转码
2013/08/28 Javascript
对Jquery中的ajax再封装,简化操作示例
2014/02/12 Javascript
js(JavaScript)实现TAB标签切换效果的简单实例
2014/02/26 Javascript
JQuery中的html()、text()、val()区别示例介绍
2014/09/01 Javascript
解决js下referer兼容各大浏览器的方法
2014/11/03 Javascript
教你使用javascript简单写一个页面模板引擎
2015/05/05 Javascript
jquery实现可自动收缩的TAB网页选项卡代码
2015/09/06 Javascript
jQuery实现CheckBox全选、全不选功能
2017/01/11 Javascript
浅谈Vue-cli 命令行工具分析
2017/11/22 Javascript
JavaScript 数组去重并统计重复元素出现的次数实例
2017/12/14 Javascript
NodeJS实现不可逆加密与密码密文保存的方法
2018/03/16 NodeJs
vue2.0+ 从插件开发到npm发布的示例代码
2018/04/28 Javascript
react实现同页面三级跳转路由布局
2019/09/26 Javascript
vue 表单输入框不支持focus及blur事件的解决方案
2020/11/17 Vue.js
简述Python中的面向对象编程的概念
2015/04/27 Python
Python pyinotify日志监控系统处理日志的方法
2018/03/08 Python
Python数据类型之List列表实例详解
2019/05/08 Python
windows环境中利用celery实现简单任务队列过程解析
2019/11/29 Python
Selenium及python实现滚动操作多种方法
2020/07/21 Python
探索HTML5本地存储功能运用技巧
2016/03/02 HTML / CSS
大专生自荐信
2013/10/04 职场文书
企业出纳岗位职责
2014/03/12 职场文书
2014年社区党建工作总结
2014/11/11 职场文书
2015年办公室主任工作总结
2015/04/09 职场文书
2015夏季作息时间调整通知
2015/04/24 职场文书
生死抉择观后感
2015/06/09 职场文书
校运会新闻稿
2015/07/17 职场文书
初中政治教学反思
2016/02/23 职场文书
详解Python牛顿插值法
2021/05/11 Python