• 《流畅的python》:由*初始化一个由列表组成的列表


    有时候我们需要初始化一个嵌套着几个列表的列表,这种情况下推荐使用列表推导式

    代码1:

    
    
    def test01():
    l = [["_"] * 3 for i in range(3)]
    print(l)
    l[1][2] = "x"
    print(l)
    if __name__ == '__main__': test01()

    执行结果

    [['_', '_', '_'], ['_', '_', '_'], ['_', '_', '_']]
    [['_', '_', '_'], ['_', '_', 'x'], ['_', '_', '_']]

     

    代码2:这种看着便捷,但实际上是错误的方式,外层列表里面实际上存的是3个指向同一个引用的列表,修改任一一个则全都被修改

    def test02():
        l = [["_"]*3]*3
        print(l)
        l[1][2] = "x"
        print(l)
    
    if __name__ == '__main__':
        test02()
    
    执行结果
    [['_', '_', '_'], ['_', '_', '_'], ['_', '_', '_']]
    [['_', '_', 'x'], ['_', '_', 'x'], ['_', '_', 'x']]

    上面两种代码的等价效果:

    代码一相当于:
    def test_11():
        l = []
        for i in range(3):
            row = ["_"]*3
            l.append(row)
        print(l)
        l[1][2] = "x"
        print(l)
    
    if __name__ == '__main__':
        test_11()
    
    代码二相当于:
    def test_22():
        l = []
        row = ["_"] * 3
        for i in range(3):
            l.append(row)
    
        print(l)
        l[1][2] = "x"
        print(l)
    
    
    if __name__ == '__main__':
        test_22()
  • 相关阅读:
    ACCP7.0-S2-复习自测-15测试分析
    线程
    多线程下的单例模式
    combobox 属性、事件、方法
    java的多线程总结
    爬虫--登录网页
    shell--字符串是否为空
    python--正则表达式 字符串匹配
    mysql---表所在数据库
    python--日期操作
  • 原文地址:https://www.cnblogs.com/canghai1024/p/13881394.html
Copyright © 2020-2023  润新知