A meno che non avete bisogno di microoptimise, mi piacerebbe proprio a questa
def myFunc(x, y):
for i in range(*sorted((x, y))):
...
Questo è più veloce anche se
def myFunc(x, y):
for i in range(x,y) if x<y else range(y,x):
...
minmax.py
def f1(x, y):
for i in range(min(x, y), max(x, y)):
pass
def f2(x, y):
for i in range(*sorted((x, y))):
pass
def f3(x, y):
for i in range(x, y) if x<y else range(y, x):
pass
def f4(x, y):
if x>y:
x,y = y,x
for i in range(x, y):
pass
def f5(x, y):
mn,mx = ((x, y), (y, x))[x>y]
for i in range(x,y):
pass
parametri di riferimento ( f3 è il più veloce r egardless dell'ordine)
$ python -m timeit -s"import minmax as mm" "mm.f1(1,2)"
1000000 loops, best of 3: 1.93 usec per loop
$ python -m timeit -s"import minmax as mm" "mm.f2(1,2)"
100000 loops, best of 3: 2.4 usec per loop
$ python -m timeit -s"import minmax as mm" "mm.f3(1,2)"
1000000 loops, best of 3: 1.16 usec per loop
$ python -m timeit -s"import minmax as mm" "mm.f4(1,2)"
100000 loops, best of 3: 1.2 usec per loop
$ python -m timeit -s"import minmax as mm" "mm.f5(1,2)"
1000000 loops, best of 3: 1.58 usec per loop
$ python -m timeit -s"import minmax as mm" "mm.f1(2,1)"
100000 loops, best of 3: 1.88 usec per loop
$ python -m timeit -s"import minmax as mm" "mm.f2(2,1)"
100000 loops, best of 3: 2.39 usec per loop
$ python -m timeit -s"import minmax as mm" "mm.f3(2,1)"
1000000 loops, best of 3: 1.18 usec per loop
$ python -m timeit -s"import minmax as mm" "mm.f4(2,1)"
1000000 loops, best of 3: 1.25 usec per loop
$ python -m timeit -s"import minmax as mm" "mm.f5(2,1)"
1000000 loops, best of 3: 1.44 usec per loop
non avevo nemmeno pensato di fare che in una riga. Ma a seconda della modalità di implementazione, potrebbe essere effettivamente meno efficiente. So che l'ordinamento della libreria standard in C++ è hardcoded per <7 elementi, quindi l'ordinamento di una lista di due elementi sarebbe solo un confronto singolo. C'è però il costo aggiuntivo della creazione di un oggetto lista. – Colin