列表生成式
最近看了个代码,一直看不懂
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方式一样的。