python中itertools模块zip_longest函数详解
时间:2019-04-20
本文章向大家介绍python中itertools模块zip_longest函数详解,主要包括python中itertools模块zip_longest函数详解使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
最近在看流畅的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)
- 在Linux系统运行WinForm程序
- 将ZIP文件添加到程序集资源文件然后在运行时解压文件
- Android中App安装位置详解
- Java面试题系列之基础部分(二)——每天学5个问题
- Java面试题系列之基础部分(四)——每天学5个问题
- 使用ORM框架,必须迁就数据库的设计吗?
- 使用OQL+SQLMAP解决ORM多表复杂的查询问题
- PostgreSQL的.NET驱动程序Npgsql中参数对象的一个Bug
- 和Emoji相关的那些开源项目
- PostgreSQL的PDF.NET驱动程序构建过程
- 基于Docker的PHP开发环境
- 以太坊·物流场景初探
- Python接口自动化-3-POST请求
- 【Python环境】Python中的结构化数据分析利器-Pandas简介
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Java Stax解析XML示例
- Codeforces Round #633 (Div. 2) B Sorted Adjacent Differences(直观感知+排序插放)
- Spring 声明式事务
- Leetcode 1320 二指输入的的最小距离(多情况讨论,DP)
- Spring 基本注解
- Spring 基于注解的 IOC 与 AOP
- Leetcode 1319 连通网络的操作次数(并查集)
- Leetcode 77. 组合 (排列组合,回溯)
- C++17特性 string_view substr只要常数复杂度,且省内存
- MQ 系列之 ActiveMQ 基本使用
- 使用脚本定时备份 MySQL 数据库
- 解决数独问题用人工智能还是量子计算?
- Leetcode 39. 组合总和(dfs)
- 短视频APP制作,设置高斯模糊
- 使用 Sunny-Ngrok 将内网程序发布到外网