it-swarm.com.de

range (len (liste)) oder enumerate (liste)?

Mögliches Duplizieren:
Nur Index erforderlich: Aufzählung oder (x) Bereich?

Welche davon würden als besser/klarer/schneller/pythonischer angesehen? Ich interessiere mich nicht für den Inhalt der Liste L, nur wie lange es ist.

a = [f(n) for n, _ in enumerate(L)]

oder

a = [f(n) for n in range(len(L))]

Wenn es einen Unterschied macht, verwendet die Funktion f auch len(list).

18

Einige schnelle Timing-Läufe scheinen die 2. Option mit range() eine leichte Kante über enumerate() zu geben:

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

und nur zum Spaß mit xrange() (Python v2.7.2)

timeit a = [f(n) for n in xrange(len(mlist))]
10000 loops, best of 3: 99 us per loop

Ich würde lesbaren Code zuerst bevorzugen und dann, falls verfügbar, xrange() verwenden (d. H. Pre-Python v 3.x), gefolgt von range() und enumerate().

21
Levon

Die (x) Range-Lösung ist schneller, weil sie weniger Aufwand hat, also würde ich das verwenden.

Verwenden Sie in Python 2.x xrange anstelle von range, da xrange weniger Speicher benötigt, da keine temporäre Liste erstellt wird. In Python 3.x gibt es nur range, die Version mit weniger Arbeitsspeicher.

5
pts

Angenommen, Sie verwenden Python 2.x. Wenn Sie len() verwenden, sollten Sie xrange() verwenden, da dies das Erstellen einer Liste der Nummern im Bereich verhindert.

In diesem Fall würde ich mit len() gehen, weil Sie die Indizes verwenden, nicht die Elemente in der Liste.

1
kindall

Ich würde sagen, da Sie nicht das Attribut "_" aus der Enumarate-Funktion verwenden, verwenden Sie den Bereich, da er auf diese Weise besser lesbar ist.

0
Ctrlspc