什么时候应该使用生成器表达式?什么时候应该在Python中使用列表推导?
# Generator expression
(x*2 for x in range(256))
# List comprehension
[x*2 for x in range(256)]
Run Code Online (Sandbox Code Playgroud) 基本上这些是相同的功能 - 除了列表理解使用,sum而不是x=0; x+=因为后者不受支持.为什么列表理解编译成40%的速度?
#list comprehension
def movingAverage(samples, n=3):
return [float(sum(samples[i-j] for j in range(n)))/n for i in range(n-1, len(samples))]
#regular
def moving_average(samples, n=3):
l =[]
for i in range(n-1, len(samples)):
x= 0
for j in range(n):
x+= samples[i-j]
l.append((float(x)/n))
return l
Run Code Online (Sandbox Code Playgroud)
对于样本输入的计时,我使用了变体 [i*random.random() for i in range(x)]