zoukankan      html  css  js  c++  java
  • python列表推导式

    循环可以用来生成列表:

    values = [10, 21, 4, 7, 12]
    squares = []
    for x in values:
        squares.append(x**2)
    print squares
    
    [100, 441, 16, 49, 144]
    

    列表推导式可以使用更简单的方法来创建这个列表:

    values = [10, 21, 4, 7, 12]
    squares = [x**2 for x in values]
    print squares
    
    [100, 441, 16, 49, 144]
    

    还可以在列表推导式中加入条件进行筛选。

    例如在上面的例子中,假如只想保留列表中不大于10的数的平方:

    values = [10, 21, 4, 7, 12]
    squares = [x**2 for x in values if x <= 10]
    print squares
    
    [100, 16, 49]
    

    也可以使用推导式生成集合和字典:

    square_set = {x**2 for x in values if x <= 10}
    print(square_set)
    square_dict = {x: x**2 for x in values if x <= 10}
    print(square_dict)
    
    set([16, 49, 100])
    {10: 100, 4: 16, 7: 49}
    

    再如,计算上面例子中生成的列表中所有元素的和:

    total = sum([x**2 for x in values if x <= 10])
    print(total)
    
    165
    
    想一起学习的,可以加入我的QQ群`923414804`。
    

    但是,Python会生成这个列表,然后在将它放到垃圾回收机制中(因为没有变量指向它),这毫无疑问是种浪费。

    为了解决这种问题,与xrange()类似,Python使用产生式表达式来解决这个问题:

    total = sum(x**2 for x in values if x <= 10)
    print(total)
    
    165
    

    与上面相比,只是去掉了括号,但这里并不会一次性的生成这个列表。

    比较一下两者的用时:

    x = range(1000000)
    
    %timeit total = sum([i**2 for i in x])
    
    1 loops, best of 3: 3.86 s per loop
    
    %timeit total = sum(i**2 for i in x)
    
    1 loops, best of 3: 2.58 s per loop
  • 相关阅读:
    CH4302 Interval GCD
    20201017 模拟赛总结
    LOJ#2610. 「NOIP2013」货车运输
    POJ3696 The Luckiest number
    20200925 小练习总结
    更新一波状态
    AFO
    【扩展lucas定理】
    【LCT维护子树信息】uoj207 共价大爷游长沙
    [bzoj4589]Hard Nim(FWT快速沃尔什变化+快速幂)
  • 原文地址:https://www.cnblogs.com/paisenpython/p/10266514.html
Copyright © 2011-2022 走看看