Ich weiß, dass Sie in Python 2.6 Folgendes tun können: h = enumerate (range (2000, 2005), 1), um das obige Ergebnis zu erhalten, aber in Python 2.5 können Sie nicht …
Verwenden von Python 2.5:
>>> h = enumerate(range(2000, 2005))
>>> [x for x in h]
[(0, 2000), (1, 2001), (2, 2002), (3, 2003), (4, 2004)]
Kennt jemand eine Möglichkeit, das gewünschte Ergebnis in Python 2.5 zu erzielen?
Nur neugierig, da ich jemand bin, der beruflich nicht viel mit Python gemacht hat. Sind Sie auf Python 2.5 beschränkt, weil Ihr Unternehmen das Upgrade aus Kompatibilitätsgründen nicht durchführen möchte?
– Sean
21. Juli 2010 um 21:52 Uhr
Alle 2.x-Versionen sind abwärtskompatibel, das ist also kein Grund.
– Jochen Ritzel
21. Juli 2010 um 22:06 Uhr
Erzählen Sie das einigen Modulen – es gibt ein paar da draußen, die in Py 2.5 funktionieren, aber nicht in Py 2.6
– xorsyst
6. Februar 2013 um 16:15 Uhr
Markus Byers
Wie Sie bereits erwähnt haben, ist dies in Python 2.6 oder neuer einfach:
enumerate(range(2000, 2005), 1)
Python 2.5 und älter unterstützen die nicht start Parameter, sodass Sie stattdessen zwei Range-Objekte erstellen und sie komprimieren könnten:
r = xrange(2000, 2005)
r2 = xrange(1, len(r) + 1)
h = zip(r2, r)
print h
Wenn Sie anstelle einer Liste einen Generator erstellen möchten, können Sie verwenden zip stattdessen.
verwenden izip und xrange wäre näher aufzuzählen
– John LaRooy
21. Juli 2010 um 21:52 Uhr
Diese Antwort ist längst überholt, man kann sie jetzt einfach stellen enumerate(iterable, start=1) ab Python 2.6.
– Friedrich Brennan
24. Februar 2013 um 22:50 Uhr
@frb: Hast du die Frage gelesen? Die Lösung für Python 2.6 kennt er bereits. Er bat ausdrücklich um eine Lösung, die in Python 2.5 funktioniert.
– Mark Byers
25. Februar 2013 um 9:05 Uhr
@MarkByers Anscheinend bin ich blind 🙂 Das tut mir wirklich leid. (Dies ist die Nummer 1 bei Google für „aufzählen beginnend bei 1“)
– Friedrich Brennan
25. Februar 2013 um 16:43 Uhr
@8chan ja, ich bin gerade von der Google-Suche hierher gekommen: “Aufzählung beginnt bei Null Python” 🙂
– Baxx
3. Juni 2015 um 0:06 Uhr
Nur um dies hier für die Nachwelt zu erwähnen, in 2.6 wurde der Parameter “start” hinzugefügt, um folgendermaßen aufzuzählen:
enumerate(sequence, start=1)
Beachten Sie, dass dadurch das erste Element in der Liste nicht übersprungen wird, sondern der Index um den Startwert versetzt wird, sodass Sie ein Array außerhalb der Grenzen erhalten würden, wenn Sie Folgendes tun würden: sequence[i] in deinem Code.
Sie müssen nicht selbst schreiben Generator wie andere Antworten hier vermuten lassen. Das eingebaute Python-Standardbibliothek enthält bereits eine Funktion, die genau das tut, was Sie wollen:
def enumerate(sequence, start=0):
n = start
for elem in sequence:
yield n, elem
n += 1
Einfach, definieren Sie einfach Ihre eigene Funktion, die das tut, was Sie wollen:
def enum(seq, start=0):
for i, x in enumerate(seq):
yield i+start, x
Der einfachste Weg, in Python 2.5 genau das zu tun, wonach Sie fragen:
import itertools as it
... it.izip(it.count(1), xrange(2000, 2005)) ...
Wenn Sie eine Liste wünschen, wie Sie scheinen, verwenden Sie zip anstelle it.izip.
(Übrigens, im Allgemeinen ist der beste Weg, eine Liste aus einem Generator oder einem anderen iterierbaren X zu erstellen, nicht[x for x in X]sondern eher list(X)).
Jochen Ritzel
from itertools import count, izip
def enumerate(L, n=0):
return izip( count(n), L)
# if 2.5 has no count
def count(n=0):
while True:
yield n
n+=1
Jetzt h = list(enumerate(xrange(2000, 2005), 1)) funktioniert.
enumerate ist trivial, ebenso wie die Neuimplementierung, um einen Start zu akzeptieren:
def enumerate(iterable, start = 0):
n = start
for i in iterable:
yield n, i
n += 1
Beachten Sie, dass dies keinen Code unterbricht, der enumerate ohne Startargument verwendet. Alternativ kann dieser Oneliner eleganter und möglicherweise schneller sein, bricht aber andere Verwendungen von enumerate:
enumerate = ((index+1, item) for index, item)
Letzteres war purer Unsinn. @Duncan hat den Wrapper richtig verstanden.
Ja, totaler Blödsinn. Etwas in dieser Richtung würde z. B. in Haskell tatsächlich funktionieren (Currying ist das Natürlichste überhaupt in dieser Sprache, und aufgrund seiner Faulheit ist eine Funktion, die eine Liste verwendet, einem Generatorausdruckg sehr ähnlich). Aber das entschuldigt mich nicht – langjährigen Python-Benutzer -, der BS schreibt. Danke für den Hinweis.
– Benutzer395760
21. Juli 2010 um 21:05 Uhr
10345500cookie-checkWie man eine Reihe von Zahlen aufzählt, die bei 1 beginnenyes
Nur neugierig, da ich jemand bin, der beruflich nicht viel mit Python gemacht hat. Sind Sie auf Python 2.5 beschränkt, weil Ihr Unternehmen das Upgrade aus Kompatibilitätsgründen nicht durchführen möchte?
– Sean
21. Juli 2010 um 21:52 Uhr
Alle 2.x-Versionen sind abwärtskompatibel, das ist also kein Grund.
– Jochen Ritzel
21. Juli 2010 um 22:06 Uhr
Erzählen Sie das einigen Modulen – es gibt ein paar da draußen, die in Py 2.5 funktionieren, aber nicht in Py 2.6
– xorsyst
6. Februar 2013 um 16:15 Uhr