python中itertools模块zip_longest函数详解

yipeiwu_com5年前Python基础

最近在看流畅的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编程图形库之Pillow使用方法讲解

Python编程图形库之Pillow使用方法讲解

PIL vs Pillow PIL: Python Imaging Library,是python的图像处理库。由于PIL不兼容setuptools,再加上更新缓慢等因素,Alex Cl...

python中实现k-means聚类算法详解

python中实现k-means聚类算法详解

算法优缺点: 优点:容易实现 缺点:可能收敛到局部最小值,在大规模数据集上收敛较慢 使用数据类型:数值型数据 算法思想 k-means算法实际上就是通过计算不同样本间的距离来判断他们...

Python发送email的3种方法

python发送email还是比较简单的,可以通过登录邮件服务来发送,linux下也可以使用调用sendmail命令来发送,还可以使用本地或者是远程的smtp服务来发送邮件,不管是单个,...

Python脚本实现DNSPod DNS动态解析域名

闲暇之余,在家里自建了个服务器,因为用的小区宽带,IP位动态分配。域名解析就是个问题,我的域名一般停放在DNSPod下。DNSPod有提供修改的API,就用Python简单的实现了一下动...

pytorch: tensor类型的构建与相互转换实例

Summary 主要包括以下三种途径: 使用独立的函数; 使用torch.type()函数; 使用type_as(tesnor)将张量转换为给定类型的张量。 使用独立函数 impor...