Далее производительность filter
n = 1000000
m = 100
def fc(x):
return x > m
def f1(l):
return filter(fc, l)
def f2(l):
return filter(lambda x: x > m, l)
def f3(l):
result = []
for x in l:
if x > m:
result.append(x)
return result
def f4(l):
result = [0] * len(l)
i = 0
for x in l:
if x > m:
result[i] = x
i += 1
return result[:i]
def f4_1(l):
result = [0] * len(l)
i = 0
for j in xrange(len(l)):
if l[j] > m:
result[i] = l[j]
i += 1
return result[:i]
def f5(l):
result = [0] * len(l)
for i in xrange(len(l)):
if l[i] > m:
result[i] = l[i]
return filter(None, result)
def f6(l):
for i in reversed(xrange(len(l))):
if l[i] > m:
del l[i]
return l
с psyco:
0:00:00.687000 f1
0:00:00.641000 f2
0:00:00.109000 f3
0:00:00.078000 f4
0:00:00.078000 f4_1
0:00:00.094000 f5
0:00:00.094000 f6
без:
0:00:00.234000 f1
0:00:00.234000 f2
0:00:00.328000 f3
0:00:00.297000 f4
0:00:00.407000 f4_1
0:00:00.359000 f5
0:00:00.266000 f6
как и обещали на в документации, psyco замедляет filter
корректный результат:
psy&gc gc psyco clean
f1 0.24378 0.23986 0.24706 0.24388 sec/repeat in 10 repeats
f2 0.25300 0.23940 0.24666 0.24256 sec/repeat in 10 repeats
f3 0.10432 0.31685 0.09148 0.31327 sec/repeat in 10 repeats
f4 0.07580 0.30256 0.07696 0.31283 sec/repeat in 10 repeats
f4_1 0.08726 0.41106 0.08710 0.42220 sec/repeat in 10 repeats
f5 0.09956 0.38880 0.09490 0.37730 sec/repeat in 10 repeats
f6 0.12091 0.26931 0.11862 0.26855 sec/repeat in 10 repeats
поправил код f6:
def f6():
result = l[:]
for i in reversed(xrange(len(result))):
if result[i] > m:
del result[i]
return result