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常用web框架简单性能测试结果分享(包含django、flask、bottle、tornado)
Aug 25 Python
python执行get提交的方法
Apr 29 Python
Python修改MP3文件的方法
Jun 15 Python
为什么你还不懂得怎么使用Python协程
May 13 Python
10个Python面试常问的问题(小结)
Nov 20 Python
Python3 使用map()批量的转换数据类型,如str转float的实现
Nov 29 Python
Python如何用wx模块创建文本编辑器
Jun 07 Python
Python带参数的装饰器运行原理解析
Jun 09 Python
Python常用库Numpy进行矩阵运算详解
Jul 21 Python
Python tkinter之ComboBox(下拉框)的使用简介
Feb 05 Python
写一个Python脚本自动爬取Bilibili小视频
Apr 24 Python
Python实现归一化算法详情
Mar 18 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
xml+php动态载入与分页
2006/10/09 PHP
laravel安装和配置教程
2014/10/29 PHP
基于PHPexecl类生成复杂的报表表头示例
2016/10/14 PHP
Jquery插件easyUi表单验证提交(示例代码)
2013/12/30 Javascript
利用jQuery简单实现产品展示图片左右滚动功能(示例代码)
2014/01/02 Javascript
JavaScript跨域方法汇总
2014/10/16 Javascript
node.js中的fs.readlinkSync方法使用说明
2014/12/17 Javascript
详解Javascript事件驱动编程
2016/01/03 Javascript
JQuery解析XML的方法小结
2016/04/02 Javascript
jquery实现ajax提交表单信息的简单方法(推荐)
2016/08/24 Javascript
Bootstrap时间选择器datetimepicker和daterangepicker使用实例解析
2016/09/17 Javascript
jQuery实现的模拟弹出窗口功能示例
2016/11/24 Javascript
JavaScript引用类型RegExp基本用法详解
2018/08/09 Javascript
详解Vue前端生产环境发布配置实战篇
2019/05/07 Javascript
vue中路由跳转不计入history的操作
2020/09/21 Javascript
[33:39]DOTA2上海特级锦标赛C组小组赛#2 LGD VS Newbee第二局
2016/02/27 DOTA
剖析Python的Tornado框架中session支持的实现代码
2015/08/21 Python
Python实现matplotlib显示中文的方法详解
2018/02/06 Python
从django的中间件直接返回请求的方法
2018/05/30 Python
详解利用django中间件django.middleware.csrf.CsrfViewMiddleware防止csrf攻击
2018/10/09 Python
python3 小数位的四舍五入(用两种方法解决round 遇5不进)
2019/04/11 Python
python操作文件的参数整理
2019/06/11 Python
django自带serializers序列化返回指定字段的方法
2019/08/21 Python
Python多线程模块Threading用法示例小结
2019/11/09 Python
用python中的matplotlib绘制方程图像代码
2019/11/21 Python
如何基于Python获取图片的物理尺寸
2019/11/25 Python
CSS3模块的目前的状况分析
2010/02/24 HTML / CSS
在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern "C"
2014/08/09 面试题
介绍一下Linux中的链接
2016/05/28 面试题
写给女朋友的道歉信
2014/01/08 职场文书
不打扫卫生检讨书
2014/02/12 职场文书
新闻传媒系求职信范文
2014/04/19 职场文书
2015年党员发展工作总结
2015/05/13 职场文书
高中数学教学反思范文
2016/02/18 职场文书
APP界面设计技巧和注意事项
2022/04/29 杂记
python如何为list实现find方法
2022/05/30 Python