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中还原JavaScript的escape函数编码后字符串的方法
Aug 22 Python
Python实现的批量下载RFC文档
Mar 10 Python
python实现分页效果
Oct 25 Python
Java编程迭代地删除文件夹及其下的所有文件实例
Feb 10 Python
用 Python 连接 MySQL 的几种方式详解
Apr 04 Python
python生成每日报表数据(Excel)并邮件发送的实例
Feb 03 Python
使用Python计算玩彩票赢钱概率
Jun 26 Python
ZABBIX3.2使用python脚本实现监控报表的方法
Jul 02 Python
使用Filter过滤python中的日志输出的实现方法
Jul 17 Python
一篇文章搞定Python操作文件与目录
Aug 13 Python
pyinstaller打包opencv和numpy程序运行错误解决
Aug 16 Python
python实现批量文件重命名
Oct 31 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
PHILIPS D1835/D1875的电路分析与打理
2021/03/02 无线电
php多重接口的实现方法
2015/06/20 PHP
yii去掉必填项中星号的方法
2015/12/28 PHP
JavaScript DOM 学习第七章 表单的扩展
2010/02/19 Javascript
jQuery实现类似滑动门切换效果的层切换
2013/09/23 Javascript
js动态添加删除,后台取数据(示例代码)
2013/11/25 Javascript
window.showModalDialog()返回值的学习心得总结
2014/01/07 Javascript
file控件选择上传文件确定后触发的js事件是哪个
2014/03/17 Javascript
浅析JavaScript基本类型与引用类型
2014/05/28 Javascript
jQuery实现弹出窗口中切换登录与注册表单
2015/06/05 Javascript
javascript框架设计之浏览器的嗅探和特征侦测
2015/06/23 Javascript
JavaScript动态改变div属性的实现方法
2015/07/22 Javascript
纯JS代码实现隔行变色鼠标移入高亮
2016/11/23 Javascript
Web纯前端“旭日图”实现元素周期表
2017/03/10 Javascript
在vue组件中使用axios的方法
2018/03/16 Javascript
vue-router传参用法详解
2019/01/19 Javascript
webpack4.x下babel的安装、配置及使用详解
2019/03/07 Javascript
Cordova(ionic)项目实现双击返回键退出应用
2019/09/17 Javascript
django简单的前后端分离的数据传输实例 axios
2020/05/18 Javascript
vue各种事件监听实例(小结)
2020/06/24 Javascript
Python中设置变量作为默认值时容易遇到的错误
2015/04/03 Python
python中常用检测字符串相关函数汇总
2015/04/15 Python
Python的Bottle框架中实现最基本的get和post的方法的教程
2015/04/30 Python
pandas 如何分割字符的实现方法
2019/07/29 Python
python 实现视频 图像帧提取
2019/12/10 Python
python实现在一个画布上画多个子图
2020/01/19 Python
Python应用实现处理excel数据过程解析
2020/06/19 Python
真正了解CSS3背景下的@font face规则
2017/05/04 HTML / CSS
YesBabyOnline美国:全球性的在线婚纱礼服工厂
2018/05/05 全球购物
2019年.net常见面试问题
2012/02/12 面试题
技校生自我鉴定范文
2013/09/26 职场文书
师范生实习自我鉴定
2013/11/01 职场文书
2014年扶贫工作总结
2014/11/18 职场文书
2014年管理工作总结
2014/11/22 职场文书
助学感谢信范文
2015/01/21 职场文书
放飞理想主题班会
2015/08/14 职场文书