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中关于字符串对象的一些基础知识
Apr 08 Python
详解Python爬虫的基本写法
Jan 08 Python
Python中使用插入排序算法的简单分析与代码示例
May 04 Python
tensorflow入门之训练简单的神经网络方法
Feb 26 Python
python查看模块安装位置的方法
Oct 16 Python
python numpy元素的区间查找方法
Nov 14 Python
Django组件content-type使用方法详解
Jul 19 Python
python 利用pyttsx3文字转语音过程详解
Sep 25 Python
在Django下创建项目以及设置settings.py教程
Dec 03 Python
python 列表、字典和集合的添加和删除操作
Dec 16 Python
python里glob模块知识点总结
Jan 05 Python
Python3 + Appium + 安卓模拟器实现APP自动化测试并生成测试报告
Jan 27 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
ip签名探针
2006/10/09 PHP
php 空格,换行,跳格使用说明
2009/12/18 PHP
PHP simple_html_dom.php+正则 采集文章代码
2009/12/24 PHP
php中邮箱地址正则表达式实现与详解
2012/04/24 PHP
php实现数字补零的方法总结
2018/09/12 PHP
重定向实现代码
2006/11/20 Javascript
JS获取scrollHeight问题想到的标准问题
2007/05/27 Javascript
再论Javascript的类继承
2011/03/05 Javascript
javascript用户注册提示效果的简单实例
2013/08/17 Javascript
JavaScript事件委托的技术原理探讨示例
2014/04/17 Javascript
jQuery中:only-child选择器用法实例
2015/01/03 Javascript
jquery使用slideDown实现模块缓慢拉出效果的方法
2015/03/27 Javascript
Javascript通过overflow控制列表闭合与展开的方法
2015/05/15 Javascript
jQuery+CSS实现的网页二级下滑菜单效果
2015/08/25 Javascript
深入理解(function(){... })();
2016/08/16 Javascript
Web前端开发之水印、图片验证码
2016/11/27 Javascript
在JS中a标签加入单击事件屏蔽href跳转页面
2016/12/16 Javascript
vuejs指令详解
2017/02/07 Javascript
PHP实现记录代码运行时间封装类实例教程
2017/05/08 Javascript
Validform验证时可以为空否则按照指定格式验证
2017/10/20 Javascript
vue cli2.0单页面title修改方法
2018/06/07 Javascript
d3.js实现图形拖拽
2019/12/19 Javascript
Python标准库之collections包的使用教程
2017/04/27 Python
python中利用Future对象异步返回结果示例代码
2017/09/07 Python
python基础之包的导入和__init__.py的介绍
2018/01/08 Python
Python爬虫包BeautifulSoup简介与安装(一)
2018/06/17 Python
对python实时得到鼠标位置的示例讲解
2018/10/14 Python
python 直接赋值和copy的区别详解
2019/08/07 Python
Python 脚本拉取 Docker 镜像问题
2019/11/10 Python
AmazeUI 等分网格的实现示例
2020/08/25 HTML / CSS
欧尚俄罗斯网上超市:Auchan俄罗斯
2018/05/03 全球购物
科茨沃尔德家居商店:Scotts of Stow
2018/06/29 全球购物
应用化学专业职业生涯规划书
2013/12/31 职场文书
组工干部对照检查材料
2014/08/25 职场文书
党员自我剖析材料(群众路线)
2014/10/06 职场文书
导游词之无锡梅园
2019/11/28 职场文书