range(len(liste)) ou énumérer(liste)? [dupliquer]
possibilité de duplication:
seul indice nécessaire: énumérer ou (x) Fourchette?
lesquels seraient considérés comme meilleurs / plus clairs/plus rapides / plus "Pythoniques"? Je ne me soucie pas du contenu de la liste L
, juste combien de temps il est.
a = [f(n) for n, _ in enumerate(L)]
ou
a = [f(n) for n in range(len(L))]
si cela fait une différence, le la fonction f
utilise len(list)
.
4 réponses
certains tirages rapides semblent donner la 2e option en utilisant range()
un léger bord au-dessus de 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 serais favorable à un code lisible première , puis à l'aide de xrange()
si disponible (c'est à dire, Pré-v Python 3.x), suivi de range()
et enumerate()
.
la solution de la gamme (x)est plus rapide, parce qu'elle a moins de frais généraux, donc je l'utiliserais.
En Python 2.x, utilisez xrange
au lieu de range
, parce que xrange
utilise moins de mémoire, parce qu'il ne crée pas de liste temporaire. En Python 3.x , il n'y a que range
, qui est la version Moins mémoire.
si vous utilisez Python 2.x, si vous utilisez len()
, vous devez utiliser xrange()
car il évitera de créer une liste des nombres dans la gamme.
et dans ce cas, je dirais len()
parce que vous utilisez les indices, pas les éléments de la liste.
je dirais que comme vous n'utilisez pas l'attribut " _ " de la fonction enumarate, alors utilisez range car il est plus lisible de cette façon.