Тем не менее, отличие самого медленного от самого быстрого составляет 2 раза. Для “тяжелой” bool_func, отличие будет конечно более заметно.
import time
import random
def bool_func( v ):
return bool(v & 1)
def func1( vals, res ):
res += [v for v in vals if bool_func(v)]
vals = [v for v in vals if not bool_func(v)]
return vals
def func2( vals, res ):
tmp = [(v, bool_func(v)) for v in vals]
res += [v[0] for v in tmp if v[1]]
vals = [v[0] for v in tmp if not v[1]]
return vals
def func3( vals, res ):
tmp = []
for v in vals:
if bool_func(v):
res.append(v)
else:
tmp.append(v)
vals = tmp
return vals
def func4( vals, res ):
vals = [v for v in vals if (res.append(v) if bool_func(v) else True)]
return vals
def func5( vals, res ):
vals = [v for v in vals if not bool_func(v) or res.append(v)]
return vals
def func6( vals, res ):
result = [], res
for v in vals:
result[bool_func(v)].append(v)
return result[0]
vals = list(range(100000))
random.shuffle( vals )
for func in [func1, func2, func3, func4, func5, func6]:
start = time.clock()
for i in range(20):
res = []
func( vals, res )
print( "Time for {} = {}".format( func.__name__, (time.clock() - start)/20 ) )
Time for func1 = 0.0963765587239
Time for func2 = 0.0977442872617
Time for func3 = 0.0598561109443
Time for func4 = 0.05586766467
Time for func5 = 0.0559596650385
Time for func6 = 0.062651857113
Python 3.1