Malgré le fait que *zip
soit plus Pythonique, le code suivant a de bien meilleures performances :
xs, ys = [], []
for x, y in zs:
xs.append(x)
ys.append(y)
Aussi, lorsque la liste originale zs
est vide, *zip
va lever une erreur, mais ce code peut gérer cela correctement.
Je viens de faire une rapide expérience, et voici le résultat :
Utilisation de *zip : 1.54701614s
Utilisation de append : 0.52687597s
En le lançant plusieurs fois, append
est 3 à 4 fois plus rapide que zip
! Le script de test est le suivant :
#!/usr/bin/env python3
import time
N = 2000000
xs = list(range(1, N))
ys = list(range(N+1, N*2))
zs = list(zip(xs, ys))
t1 = time.time()
xs_, ys_ = zip(*zs)
print(len(xs_), len(ys_))
t2 = time.time()
xs_, ys_ = [], []
for x, y in zs:
xs_.append(x)
ys_.append(y)
print(len(xs_), len(ys_))
t3 = time.time()
print('Utilisation de *zip :\t{:.8f}s'.format(t2 - t1))
print('Utilisation de append :\t{:.8f}s'.format(t3 - t2))
Ma version de Python :
Python 3.6.3 (default, Oct 24 2017, 12:18:40)
[GCC 4.2.1 Compatible Apple LLVM 8.1.0 (clang-802.0.42)] sur darwin
Tapez "help", "copyright", "credits" ou "license" pour plus d'informations.