Dupliquer possible:
Seul index nécessaire: énumérer ou (x) plage?
Lequel de ceux-ci serait considéré comme meilleur/plus clair/plus rapide/plus «pythonique»? Je me fous du contenu de la liste L
, du temps qu’elle prend.
a = [f(n) for n, _ in enumerate(L)]
ou
a = [f(n) for n in range(len(L))]
Si cela fait une différence, la fonction f
utilise également len(list)
.
Quelques exécutions rapides semblent donner à la 2ème option en utilisant range()
un léger avantage sur enumerate()
:
timeit a = [f(n) for n, _ in enumerate(mlist)]
10000 loops, best of 3: 118 us per loop
timeit a = [f(n) for n in range(len(mlist))]
10000 loops, best of 3: 102 us per loop
et juste pour le plaisir en utilisant xrange()
(Python v2.7.2)
timeit a = [f(n) for n in xrange(len(mlist))]
10000 loops, best of 3: 99 us per loop
Je préférerais d'abord le code lisible , puis en utilisant xrange()
si disponible (c'est-à-dire, Pre-Python v 3.x), suivi de range()
et enumerate()
.
La solution de plage (x) est plus rapide, car elle nécessite moins de temps système, donc je l’utiliserais.
Dans Python 2.x, utilisez xrange
au lieu de range
, car xrange
utilise moins de mémoire, car il ne crée pas de liste temporaire. Dans Python 3.x, il n'y a que range
, qui est la version avec moins de mémoire.
En supposant que vous utilisez Python 2.x, si vous utilisez len()
, vous devez utiliser xrange()
car cela évitera de créer une liste des nombres dans la plage.
Et dans ce cas, je choisirais len()
car vous utilisez les index, pas les éléments de la liste.
Je dirais que comme vous n'utilisez pas l'attribut "_" de la fonction enumerate, utilisez range car il est plus lisible de cette façon.