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中使用多进程来实现并行处理的方法小结
Aug 09 Python
Python SQLite3数据库日期与时间常见函数用法分析
Aug 14 Python
python广度优先搜索得到两点间最短路径
Jan 17 Python
对python 多线程中的守护线程与join的用法详解
Feb 18 Python
opencv与numpy的图像基本操作
Mar 08 Python
python2与python3爬虫中get与post对比解析
Sep 18 Python
PyTorch实现AlexNet示例
Jan 14 Python
Python实现点云投影到平面显示
Jan 18 Python
OpenCV Python实现图像指定区域裁剪
Mar 12 Python
Python headers请求头如何实现快速添加
Nov 03 Python
提取视频中的音频 Python只需要三行代码!
May 10 Python
Anaconda安装pytorch和paddle的方法步骤
Apr 03 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中strnatcmp()函数“自然排序算法”进行字符串比较用法分析(对比strcmp函数)
2016/01/07 PHP
基于Jquery的回车成tab焦点切换效果代码(Enter To Tab )
2010/11/14 Javascript
jQuery中contents()方法用法实例
2015/01/08 Javascript
详细分析JavaScript变量类型
2015/07/08 Javascript
javascript学习小结之prototype
2015/12/03 Javascript
论Bootstrap3和Foundation5网格系统的异同
2016/05/16 Javascript
jquery表格datatables实例解析 直接加载和延迟加载
2016/08/12 Javascript
js实现定时进度条完成后切换图片
2017/01/04 Javascript
Three.js利用dat.GUI如何简化试验流程详解
2017/09/26 Javascript
JS中的多态实例详解
2017/10/15 Javascript
create-react-app构建项目慢的解决方法
2018/03/14 Javascript
JS实现二维数组横纵列转置的方法
2018/04/17 Javascript
详解Angular5路由传值方式及其相关问题
2018/04/28 Javascript
详解webpack 热更新优化
2018/09/13 Javascript
vue登录注册实例详解
2019/09/14 Javascript
javascript 对象 与 prototype 原型用法实例分析
2019/11/11 Javascript
python client使用http post 到server端的代码
2013/02/10 Python
python分析apache访问日志脚本分享
2015/02/26 Python
Python中的浮点数原理与运算分析
2017/10/12 Python
Python运维自动化之nginx配置文件对比操作示例
2018/08/29 Python
浅析Python与Mongodb数据库之间的操作方法
2019/07/01 Python
python实现屏保程序(适用于背单词)
2019/07/30 Python
python正则爬取某段子网站前20页段子(request库)过程解析
2019/08/10 Python
Python3自定义json逐层解析器代码
2020/05/11 Python
CSS3动画之利用requestAnimationFrame触发重新播放功能
2019/09/11 HTML / CSS
css3实现平移效果(transfrom:translate)的示例
2020/11/13 HTML / CSS
Harman Audio官方商店:购买JBL、Harman Kardon、Infinity和AKG
2019/12/05 全球购物
L’Artisan Parfumeur官网:法国香水品牌
2020/08/11 全球购物
.NET现在共支持多少种语言
2014/02/26 面试题
开业庆典邀请函
2014/01/08 职场文书
2014年质量管理工作总结
2014/12/01 职场文书
2014年小学美术工作总结
2014/12/20 职场文书
学校勤俭节约倡议书
2015/04/29 职场文书
给老婆的保证书怎么写
2015/05/08 职场文书
关于antd tree 和父子组件之间的传值问题(react 总结)
2021/06/02 Javascript
如何给HttpServletRequest增加消息头
2021/06/30 Java/Android