• 【原创】从 列表的重复 到 用sum展开二层嵌套列表将子元素合并


     
     

     
    ★像R语言里头有rep函数可以让向量的值重复,在python里面可以直接对列表用乘法让列表进行重复
    注:这里生成的重复列表是个新列表(我们可以打印id查看一下)
     
    a = [1,2]
    b = a * 3
    a
    Out[1]: [1, 2]
    b
    Out[2]: [1, 2, 1, 2, 1, 2]
    id(a)
    Out[3]: 303757832
    id(b)
    Out[4]: 303741000
    ★将嵌套列表中的 子元素 合并,可以用sum函数,第二个参数传入一个空列表[]即可
    注意:sum函数的参数包括两个(iterable可迭代对象,start求和的初始值),sum会把可迭代对象内的元素加在start参数传入的初始值上。
     
    因此,如果初始值是个列表,那么可迭代对象也必须要是个列表,且必须是嵌套列表,因为只有这个列表元素也是列表时,这些元素才能跟初始值列表相加。
    我们来列举几个例子
     
    # 实际在计算:[] + [1,2] + [3,4]
    sum([[1,2], [3,4]], [])
    Out[13]: [1, 2, 3, 4]
    
    # 实际在计算:[5] + [1,2] + [3,4]
    sum([[1,2], [3,4]], [5])
    Out[14]: [5, 1, 2, 3, 4]
    
    # 实际在计算:[5,6] + [1,2] + [3,4]
    sum([[1,2], [3,4]], [5,6])
    Out[15]: [5, 6, 1, 2, 3, 4]
    
    # 实际在计算:[[5]] + [1,2] + [3,4]
    sum([[1,2], [3,4]], [[5]])
    Out[16]: [[5], 1, 2, 3, 4]
    
    # 实际在计算:[[5,6]] + [1,2] + [3,4]
    sum([[1,2], [3,4]], [[5,6]])
    Out[17]: [[5, 6], 1, 2, 3, 4]
    我们会发现,这里sum函数都是在传入的第二个参数列表基础上,再合并了第一个参数——嵌套列表的所有子元素
     
    ★例子:如何让一个列表c = [1,2,3,4]中的每个元素重复指定次数(各元素重复次数按列表d=[4,1,3,2]来重复),生成一个新列表?
     
    sum([[c[i]]*d[i] for i in range(len(c))], [])
    Out[31]: [1, 1, 1, 1, 2, 3, 3, 3, 4, 4]
     
    # 更简单的(利用zip进行对应位置的元素匹配,免去了使用索引)
    sum([[x] * y for x,y in zip(c, d)], [])
    Out[43]: [1, 1, 1, 1, 2, 3, 3, 3, 4, 4]
    利用的就是上面提到的:
     
            1. 列表数据类型可以直接使用乘法来指定次数进行重复
       2. sum(嵌套列表,[])可以展开二层嵌套列表并合并嵌套列表中的各子列表元素
     
    注意:sum只能展开第一个参数中嵌套列表的最外头2层(实际上原理已经在上面提到了,就是展开列表里面的元素加在初始值上),例如下面这个例子
     
    # 实际在计算:[0] + [[1,2], [3,4]] + [5,6]
    sum([[[1,2],[3,4]],[5,6]], [0])
    Out[34]: [0, [1, 2], [3, 4], 5, 6]
  • 相关阅读:
    oracle 日期和时间转换
    layui 分页 java后端封装
    excel 时间格式
    excel的编程VBA
    excel条件格式
    python列表变成字符串
    Django的ORM源码学习
    robot 源码解读6【元类和描述符类】
    @staticmethod
    python 类定义后调用名称也执行内部代码
  • 原文地址:https://www.cnblogs.com/oceanicstar/p/9517159.html
Copyright © 2020-2023  润新知