zoukankan      html  css  js  c++  java
  • zip矩阵转至

    1 list01=[1,2,3,4]
    2 list02=["a","b","c","d"]
    3 
    4 for itme in zip(list01,list02):
    5     print(list(itme))

    结果:

    [1, 'a']
    [2, 'b']
    [3, 'c']
    [4, 'd']

    zip最简单的用法“列对接”我们可以看到zip可以将列与列组合在一起

    我在学习一些如2048等项目的时候会用到矩阵转至思想的,但没有zip的时候是很痛苦的,当有了zip的时候我们就可以这样做:

    list01=[
        [1,2,3,4],
        [5,6,7,8],
        [9,8,7,4],
        [1,5,8,7]
    ]
    list02=[]
    
    for itme in zip(list01[0],list01[1],list01[2],list01[3]):
        list02.append(list(itme))
    print(list02)

    结果:

    [[1, 5, 9, 1], [2, 6, 8, 5], [3, 7, 7, 8], [4, 8, 4, 7]]

    这样就将之前的13行矩阵转至代码简化为3行:但这样写也是不够灵活,当我们增加一行数据时代码有又需要改动:

    list01=[
        [1,2,3,4],
        [5,6,7,8],
        [9,8,7,4],
        [1,5,8,7],
        [7,4,5,6]
    ]
    list02=[]
    
    for itme in zip(list01[0],list01[1],list01[2],list01[3],list01[4]):
        list02.append(list(itme))
    print(list02)

    有的同学会想到可变量参数化,这样也是不可取的,这样做代码有将变得臃肿,我们不如用拆包和装包的思想:

    list01=[
        [1,2,3,4],
        [5,6,7,8],
        [9,8,7,4],
        [1,5,8,7],
        [7,4,5,6]
    ]
    list02=[]
    
    for itme in zip(*list01):
        list02.append(list(itme))
    print(list02)

    当到这一步的时候我们就可以用Python的特色-----列表推导式

    list01=[
        [1,2,3,4],
        [5,6,7,8],
        [9,8,7,4],
        [1,5,8,7]
    ]
    list02=[list(itme) for itme in zip(*list01)]
    print(list02)

    结果:

    [[1, 5, 9, 1], [2, 6, 8, 5], [3, 7, 7, 8], [4, 8, 4, 7]]

  • 相关阅读:
    MySQL源代码解读(二)
    MySQL源代码解读(一)
    C语言中如何对串口进行操作
    mysql 运行概图
    Yacc 与 Lex
    外键建索引
    提高SQL查询效率
    MySQL源代码分析:(1)Main函数
    Linux "could not open default font 'fixed'."
    转帖 浅析ARM汇编语言子例程设计方法
  • 原文地址:https://www.cnblogs.com/yongqi-wang/p/13167991.html
Copyright © 2011-2022 走看看