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基础教程之正则表达式基本语法以及re模块
Mar 25 Python
Python File readlines() 使用方法
Mar 19 Python
Python中的asyncio代码详解
Jun 10 Python
PyQt5 实现字体大小自适应分辨率的方法
Jun 18 Python
简单了解python单例模式的几种写法
Jul 01 Python
python实现网站用户名密码自动登录功能
Aug 09 Python
基于tensorflow指定GPU运行及GPU资源分配的几种方式小结
Feb 03 Python
解决pyqt5异常退出无提示信息的问题
Apr 08 Python
python爬虫基础知识点整理
Jun 02 Python
matplotlib基础绘图命令之bar的使用方法
Aug 13 Python
多个版本的python共存时使用pip的正确做法
Oct 26 Python
python运行脚本文件的三种方法实例
Jun 25 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+mysqli实现批量执行插入、更新及删除数据的方法
2015/01/29 PHP
Symfony2框架创建项目与模板设置实例详解
2016/03/17 PHP
PHP实现数据库统计时间戳按天分组输出数据的方法
2017/10/10 PHP
PHP-FPM 的管理和配置详解
2019/02/17 PHP
Centos7安装swoole扩展操作示例
2020/03/26 PHP
在线编辑器的实现原理(兼容IE和FireFox)
2007/03/09 Javascript
js继承call()和apply()方法总结
2014/12/08 Javascript
使用javascript实现判断当前浏览器
2015/04/14 Javascript
jQuery Easyui学习之datagrid 动态添加、移除editor
2016/01/27 Javascript
概述jQuery的元素筛选
2016/11/23 Javascript
vue-router:嵌套路由的使用方法
2017/02/21 Javascript
MUI 解决动态列表页图片懒加载再次加载不成功的bug问题
2017/04/13 Javascript
Vue 项目部署到服务器的问题解决方法
2017/12/05 Javascript
Vue列表渲染的示例代码
2018/11/01 Javascript
微信小程序实现星级评价效果
2018/12/28 Javascript
详解Vue demo实现商品列表的展示
2019/05/07 Javascript
小程序实现投票进度条
2019/11/20 Javascript
[05:15]DOTA2英雄梦之声_第16期_灰烬之灵
2014/06/21 DOTA
python模块smtplib学习
2018/05/22 Python
Python使用numpy产生正态分布随机数的向量或矩阵操作示例
2018/08/22 Python
Window 64位下python3.6.2环境搭建图文教程
2018/09/19 Python
python requests.post带head和body的实例
2019/01/02 Python
Python使用crontab模块设置和清除定时任务操作详解
2019/04/09 Python
python批量爬取下载抖音视频
2019/06/17 Python
Python爬虫学习之翻译小程序
2019/07/30 Python
Scrapy框架实现的登录网站操作示例
2020/02/06 Python
实例教程 HTML5 Canvas 超炫酷烟花绽放动画实现代码
2014/11/05 HTML / CSS
MySQL面试题
2014/01/12 面试题
Net Remoting把服务器端激活两种模式
2014/01/22 面试题
合作意向书范本
2014/03/31 职场文书
党员教师四风问题对照检查材料
2014/09/26 职场文书
税务干部个人整改措施思想汇报
2014/10/10 职场文书
写给同事的离职感言
2015/08/04 职场文书
深度学习详解之初试机器学习
2021/04/14 Python
Golang原生rpc(rpc服务端源码解读)
2022/04/07 Golang
mysql使用FIND_IN_SET和group_concat两个方法查询上下级机构
2022/04/20 MySQL