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)

原文地址:http://blog.51cto.com/smly1989/2128100

时间: 2024-08-29 08:42:24

python中itertools模块zip_longest函数实现逻辑的相关文章

python中itertools模块介绍---01

itertools模块中包含了很多函数,这些函数最终都生成一个或多个迭代器,下面对这些函数进行介绍: 为了能够使用itertools中的函数,需要将该模块导入: >>>from itertools import * count(start=0,step=1): 源代码为: def count(start=0,step=1):     n=start     while True:         yield n         n+=step 从源代码可以看出,count函数产生一个生成

python中itertools模块介绍---02

chain(*iterables): 源代码: def chain(*iterables):     for it in iterables:         for element in it:             yield element chain函数接收多个参数(iterables),并且对iterables进行遍历,返回每个iterable中的元素.最终结果就像返回的所有元素均来自同一个单一的序列,例如: >>>a=chain('ab','cd') >>>

学习django之python中os模块的函数

os.sep可以取代操作系统特定的路径分隔符.windows下为 “\\” os.name字符串指示你正在使用的平台.比如对于Windows,它是'nt',而对于Linux/Unix用户,它是'posix'. os.getcwd()函数得到当前工作目录,即当前Python脚本工作的目录路径. os.getenv()获取一个环境变量,如果没有返回none os.putenv(key, value)设置一个环境变量值 os.listdir(path)返回指定目录下的所有文件和目录名. os.remo

python中itertools模块介绍---03

product(*iterables[,repeat]): 源代码: def product(*args,**kwds):     pools=map(tuple,args)*kwds.get("repeat",1)     result=[[]]     for pool in pools:         result=[x+[y] for x in result for y in pool]     for prod in result:         yield tuple(

Python中datetime模块中strftime/strptime函数

python中datetime模块非常好用,提供了日期格式和字符串格式相互转化的函数strftime/strptime 1.由日期格式转化为字符串格式的函数为: datetime.datetime.strftime() 2.由字符串格式转化为日期格式的函数为: datetime.datetime.strptime() 3.两个函数都涉及日期时间的格式化字符串,列举如下: %a 星期几的简写;如 星期三为Web %A 星期几的全称;如 星期三为Wednesday %b 月份的简写; 如4月份为Ap

Python学习(二):入门篇:python中流程控制与函数编写

python中流程控制与函数编写 Last Eidt 2014/5/2 转载请注明出处http://blog.csdn.net/jxlijunhao 一,流程控制 1)布尔逻辑 Python中利用True来表示逻辑真,False来逻辑假 not :非 and:与 or   :或 ==  :逻辑等 >>> False==True False >>> False==False True >>> not False True >>> Fal

python 之 itertools模块

官方:https://yiyibooks.cn/xx/python_352/library/itertools.html 参考: https://blog.csdn.net/neweastsun/article/details/51965226 https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143200162233153835cfdd1a541a18ddc15059e3d

Python中time模块详解

在Python中,与时间处理有关的模块就包括:time,datetime以及calendar.这篇文章,主要讲解time模块. 在开始之前,首先要说明这几点: 在Python中,通常有这几种方式来表示时间:1)时间戳 2)格式化的时间字符串 3)元组(struct_time)共九个元素.由于Python的time模块实现主要调用C库,所以各个平台可能有所不同. UTC(Coordinated Universal Time,世界协调时)亦即格林威治天文时间,世界标准时间.在中国为UTC+8.DST

Python中optionParser模块的使用方法[转]

本文以实例形式较为详尽的讲述了Python中optionParser模块的使用方法,对于深入学习Python有很好的借鉴价值.分享给大家供大家参考之用.具体分析如下: 一般来说,Python中有两个内建的模块用于处理命令行参数: 一个是 getopt,<Deep in python>一书中也有提到,只能简单处理 命令行参数: 另一个是 optparse,它功能强大,而且易于使用,可以方便地生成标准的.符合Unix/Posix 规范的命令行说明. 示例如下: ? 1 2 3 4 5 6 7 8