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 30 Python
Python 正则表达式(转义问题)
Dec 15 Python
用Python制作简单的钢琴程序的教程
Apr 01 Python
python3中bytes和string之间的互相转换
Feb 09 Python
Python利用Beautiful Soup模块搜索内容详解
Mar 29 Python
Python数据类型中的“冒号“[::]——分片与步长操作示例
Jan 24 Python
Python实现按中文排序的方法示例
Apr 25 Python
Python获取当前脚本文件夹(Script)的绝对路径方法代码
Aug 27 Python
Python进程,多进程,获取进程id,给子进程传递参数操作示例
Oct 11 Python
python数据化运营的重要意义
Nov 25 Python
Python threading模块condition原理及运行流程详解
Oct 05 Python
Appium中scroll和drag_and_drop根据元素位置滑动
Feb 15 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来实现网络服务
2009/09/15 PHP
php中操作memcached缓存进行增删改查数据的实现代码
2014/08/15 PHP
thinkphp验证码的实现(form、ajax实现验证)
2016/07/28 PHP
header与缓冲区之间的深层次分析
2016/07/30 PHP
PHP封装的PDO数据库操作类实例
2017/06/21 PHP
Thinkphp极验滑动验证码实现步骤解析
2020/11/24 PHP
jQuery 选择器项目实例分析及实现代码
2012/12/28 Javascript
js随机颜色代码的多种实现方式
2013/04/23 Javascript
js中哈希表的几种用法总结
2014/01/28 Javascript
js读取cookie方法总结
2014/10/31 Javascript
JavaScript中实现单体模式分享
2015/01/29 Javascript
详解JavaScript中void语句的使用
2015/06/04 Javascript
Bootstrap精简教程
2015/11/27 Javascript
ES6中如何使用Set和WeakSet
2016/03/10 Javascript
关于vuex的学习实践笔记
2017/04/05 Javascript
socket.io学习教程之基本应用(二)
2017/04/29 Javascript
微信小程序后台解密用户数据实例详解
2017/06/28 Javascript
Angular2 组件交互实例详解
2017/08/24 Javascript
elementui的默认样式修改方法
2018/02/23 Javascript
JavaScript面试出现频繁的一些易错点整理
2018/03/29 Javascript
从Vuex中取出数组赋值给新的数组,新数组push时报错的解决方法
2018/09/18 Javascript
详解Vue.js自定义tipOnce指令用法实例
2018/12/19 Javascript
javascript json字符串到json对象转义问题
2019/01/22 Javascript
详解JS实现系统登录页的登录和验证
2019/04/29 Javascript
分享一个vue项目“脚手架”项目的实现步骤
2019/05/26 Javascript
深入理解 JS 垃圾回收
2019/06/03 Javascript
[01:33]真香警告!DOTA2勇士令状不朽珍藏Ⅱ饰品欣赏
2018/06/26 DOTA
python实现简单中文词频统计示例
2017/11/08 Python
Python (Win)readline和tab补全的安装方法
2019/08/27 Python
浅谈Django+Gunicorn+Nginx部署之路
2019/09/11 Python
python操作docx写入内容,并控制文本的字体颜色
2020/02/13 Python
python 5个顶级异步框架推荐
2020/09/09 Python
HTML5混合开发二维码扫描以及调用本地摄像头
2017/12/27 HTML / CSS
九月份红领巾广播稿
2014/01/22 职场文书
全国法制宣传日活动总结
2015/05/05 职场文书
《平移和旋转》教学反思
2016/02/19 职场文书