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 Mysql自动备份脚本
Jul 14 Python
python检测lvs real server状态
Jan 22 Python
简单的通用表达式求10乘阶示例
Mar 03 Python
深入理解Javascript中的this关键字
Mar 27 Python
Python文件与文件夹常见基本操作总结
Sep 19 Python
MySQL适配器PyMySQL详解
Sep 20 Python
Python实现自动发送邮件功能
Mar 02 Python
详解Python3 基本数据类型
Apr 19 Python
pytorch 使用单个GPU与多个GPU进行训练与测试的方法
Aug 19 Python
Matplotlib.pyplot 三维绘图的实现示例
Jul 28 Python
Python 捕获代码中所有异常的方法
Aug 03 Python
numpy数据类型dtype转换实现
Apr 24 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中header的用法详解
2013/06/07 PHP
PHP实现的英文名字全拼随机排号脚本
2014/07/04 PHP
php获取一个变量的名字的方法
2014/09/05 PHP
php自定义函数实现汉字转换utf8编码的方法
2016/09/29 PHP
ZendFramework2连接数据库操作实例
2017/04/18 PHP
PHP设计模式(九)外观模式Facade实例详解【结构型】
2020/05/02 PHP
javascript 定义新对象方法
2010/02/20 Javascript
web的各种前端打印方法之jquery打印插件jqprint实现网页打印
2013/01/09 Javascript
jquery中load方法的用法及注意事项说明
2014/02/22 Javascript
JavaScript字符串对象charAt方法入门实例(用于取得指定位置的字符)
2014/10/17 Javascript
JavaScript获取指定元素位置的方法
2015/04/08 Javascript
基于JQuery实现分隔条的功能
2016/06/17 Javascript
js选项卡的制作方法
2017/01/23 Javascript
vue2.0 中#$emit,$on的使用详解
2017/06/07 Javascript
vue深入解析之render function code详解
2017/07/18 Javascript
JavaScript实现省市联动过程中bug的解决方法
2017/12/04 Javascript
总结JavaScript在IE9之前版本中内存泄露问题
2018/04/28 Javascript
vue中使用input[type=&quot;file&quot;]实现文件上传功能
2018/09/10 Javascript
Java Varargs 可变参数用法详解
2020/01/28 Javascript
Python中的自定义函数学习笔记
2014/09/23 Python
使用Python编写Linux系统守护进程实例
2015/02/03 Python
实用自动化运维Python脚本分享
2018/06/04 Python
Pandas Shift函数的基础入门学习笔记
2018/11/16 Python
linux安装python修改默认python版本方法
2019/03/31 Python
Python lambda表达式原理及用法解析
2020/08/18 Python
html5开发之viewport使用
2013/10/17 HTML / CSS
欧洲著名的珠宝和手表网上商城:uhrcenter
2017/04/10 全球购物
倩碧香港官方网站:Clinique香港
2017/11/13 全球购物
酒店销售经理岗位职责
2014/01/31 职场文书
优秀食品类广告词
2014/03/19 职场文书
《祁黄羊》教学反思
2014/04/22 职场文书
行政专员岗位职责说明书
2014/09/01 职场文书
技术入股合作协议书
2014/10/07 职场文书
家庭教育教师培训学习体会
2016/01/14 职场文书
JS继承最简单的理解方式
2021/03/31 Javascript
Redis监控工具RedisInsight安装与使用
2022/03/21 Redis