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 17 Python
Python3 实现随机生成一组不重复数并按行写入文件
Apr 09 Python
python smtplib模块实现发送邮件带附件sendmail
May 22 Python
python中ImageTk.PhotoImage()不显示图片却不报错问题解决
Dec 06 Python
python程序变成软件的实操方法
Jun 24 Python
python定间隔取点(np.linspace)的实现
Nov 27 Python
Python发起请求提示UnicodeEncodeError错误代码解决方法
Apr 21 Python
用Python开发app后端有优势吗
Jun 29 Python
Python基于pyjnius库实现访问java类
Jul 31 Python
理解Django 中Call Stack机制的小Demo
Sep 01 Python
Python GUI库Tkiner使用方法代码示例
Nov 27 Python
python上下文管理的使用场景实例讲解
Mar 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初学者头疼问题总结
2006/07/08 PHP
php disk_free_space 返回目录可用空间
2010/05/10 PHP
php循环检测目录是否存在并创建(循环创建目录)
2011/01/06 PHP
PHP使用文件锁解决高并发问题示例
2018/03/29 PHP
PHP操作Postgresql封装类与应用完整实例
2018/04/24 PHP
PHP-FPM的配置与优化讲解
2019/03/15 PHP
Laravel + Elasticsearch 实现中文搜索的方法
2020/02/02 PHP
javaScript基础语法介绍
2015/02/28 Javascript
浅析AngularJs HTTP响应拦截器
2015/12/28 Javascript
JavaScript是如何实现继承的(六种方式)
2016/03/31 Javascript
JQuery遍历元素的后代和同胞实现方法
2016/09/18 Javascript
AngularJS通过$sce输出html的方法
2016/09/22 Javascript
用Vue.js实现监听属性的变化
2016/11/17 Javascript
微信小程序链接传参并跳转新页面
2016/11/29 Javascript
基于jQuery实现表格的排序
2016/12/02 Javascript
详解nodejs 文本操作模块-fs模块(一)
2016/12/22 NodeJs
Bootstrap表格制作代码
2017/03/17 Javascript
Angular 4.x 路由快速入门学习
2017/05/03 Javascript
基于Node的React图片上传组件实现实例代码
2017/05/10 Javascript
JS实现静态页面搜索并高亮显示功能完整示例
2017/09/19 Javascript
jQuery EasyUI window窗口使用实例代码
2017/12/25 jQuery
vue配置多页面的实现方法
2018/05/22 Javascript
详解nuxt路由鉴权(express模板)
2018/11/21 Javascript
超好用的jQuery分页插件jpaginate用法示例【附源码下载】
2018/12/06 jQuery
基于python的七种经典排序算法(推荐)
2016/12/08 Python
Python实现嵌套列表去重方法示例
2017/12/28 Python
微信跳一跳小游戏python脚本
2018/01/05 Python
pyqt实现.ui文件批量转换为对应.py文件脚本
2019/06/19 Python
python 实现的发送邮件模板【普通邮件、带附件、带图片邮件】
2019/07/06 Python
python给视频添加背景音乐并改变音量的具体方法
2020/07/19 Python
无谷物狗粮:Pooch & Mutt
2018/05/23 全球购物
将时尚融入珠宝:Adornmonde
2019/10/17 全球购物
房地产管理毕业生自荐信
2013/11/04 职场文书
行政复议答复书
2015/07/01 职场文书
2019年七夕情人节浪漫祝福语大全!
2019/08/08 职场文书
SpringBoot整合阿里云视频点播的过程详解
2021/12/06 Java/Android