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 map和reduce函数用法示例
Feb 26 Python
Python爬虫中urllib库的进阶学习
Jan 05 Python
Python 创建空的list,以及append用法讲解
May 04 Python
python openpyxl使用方法详解
Jul 18 Python
python 进程的几种创建方式详解
Aug 29 Python
Python实现把多维数组展开成DataFrame
Nov 30 Python
Python编程快速上手——疯狂填词程序实现方法分析
Feb 29 Python
解决Jupyter因卸载重装导致的问题修复
Apr 10 Python
Python如何使用正则表达式爬取京东商品信息
Jun 01 Python
浅谈多卡服务器下隐藏部分 GPU 和 TensorFlow 的显存使用设置
Jun 30 Python
Python脚本实现Zabbix多行日志监控过程解析
Aug 26 Python
Python爬虫Scrapy框架CrawlSpider原理及使用案例
Nov 20 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 获取当前访问的url文件名的方法小结
2010/02/08 PHP
php XPath对XML文件查找及修改实现代码
2011/07/27 PHP
php的api数据接口书写实例(推荐)
2016/09/22 PHP
根据分辨率不同,调用不同的css文件
2006/08/25 Javascript
音乐播放用的的几个函数
2006/09/07 Javascript
javascript 面向对象编程 function也是类
2009/09/17 Javascript
100个不能错过的实用JS自定义函数
2014/03/05 Javascript
javascript引用类型指针的工作方式
2015/04/13 Javascript
Canvas + JavaScript 制作图片粒子效果
2017/02/08 Javascript
详解JavaScript数组过滤相同元素的5种方法
2017/05/23 Javascript
小程序关于请求同步的总结
2019/05/05 Javascript
微信小程序之下拉列表实现方法解析(附完整源码)
2019/08/23 Javascript
vue.js实现左边导航切换右边内容
2019/10/21 Javascript
原生js+ajax分页组件
2020/01/30 Javascript
[01:05:12]2014 DOTA2国际邀请赛中国区预选赛 TongFu VS CIS-GAME
2014/05/21 DOTA
[04:23]DOTA2上海特锦赛小组赛第一日 TOP10精彩集锦
2016/02/27 DOTA
python基础教程之实现石头剪刀布游戏示例
2014/02/11 Python
Python简单实现enum功能的方法
2016/04/25 Python
Python实现网络端口转发和重定向的方法
2016/09/19 Python
详谈python read readline readlines的区别
2017/09/22 Python
python如何建立全零数组
2020/07/19 Python
Python模拟登录requests.Session应用详解
2020/11/17 Python
PyChon中关于Jekins的详细安装(推荐)
2020/12/28 Python
使用HTML5和CSS3表单验证功能
2017/05/05 HTML / CSS
全球知名提供各类营养保健品的零售商:Vitamin Shoppe
2016/10/09 全球购物
欧洲顶级的童装奢侈品购物网站:Bambini Fashion(面向全球)
2018/04/24 全球购物
adidas瑞典官方网站:购买阿迪达斯鞋子和运动服
2019/12/11 全球购物
英国网上电器商店:Electricshop
2020/03/15 全球购物
EJB的激活机制
2013/10/25 面试题
纠纷协议书
2014/04/16 职场文书
药品业务员岗位职责
2014/04/17 职场文书
环保建议书600字
2014/05/14 职场文书
2015年世界环境日演讲稿
2015/03/18 职场文书
将图片保存到mysql数据库并展示在前端页面的实现代码
2021/05/02 MySQL
一次项目中Thinkphp绕过禁用函数的实战记录
2021/11/17 PHP
电脑开机弹出documents文件夹怎么回事?弹出documents文件夹解决方法
2022/04/08 数码科技