列表生成式

最近看了个代码,一直看不懂

def moving_average(a, w=10):
    if len(a) < w: 
        return a[:]    
    return [val if idx < w else sum(a[(idx-w):idx])/w for idx, val in enumerate(a)]

直到问了别人,给我将代码详细化之后,才明白:

def moving_average(a, w=10):
    if len(a) < w: 
        return a[:]    
    else:
        b=[]
        for idx,val in enumerate(a):
            if idx < w:
                b.append(val)
            else:
                b.append(sum(a[(idx-w):idx])/w)
        return b

 

告诉我这是列表生成式。

于是,我便开始研究列表生成式的概念。

循环太繁琐,而列表生成式则可以用一行语句代替循环生成上面的list,以下例子:

但如果要生成[1x1, 2x2, 3x3, ..., 10x10]怎么做?方法一是循环:

>>> L = []
>>> for x in range(1, 11):
...    L.append(x * x)
...
>>> L
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

但是循环太繁琐,而列表生成式则可以用一行语句代替循环生成上面的list:

>>> [x * x for x in range(1, 11)]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]


如果需要用到if,和if else条件的情况
if的时候,放for后面,if else放for前面。
what the fuck! 凭什么,我之前一直以为if和if else方式一样的。


 

posted @ 2019-08-16 15:39  不加班不熬夜的男子  阅读(142)  评论(0编辑  收藏  举报