Ich verwende Python 2.5, ich möchte eine Aufzählung wie diese (beginnend bei 1 statt 0):
[(1, 2000), (2, 2001), (3, 2002), (4, 2003), (5, 2004)]
Ich weiß, dass Sie in Python 2.6 Folgendes tun können: h = Aufzählung (Bereich (2000, 2005), 1), um das obige Ergebnis zu erhalten, aber in Python2.5 können Sie nicht ...
Verwenden von Python2.5:
>>> h = enumerate(range(2000, 2005))
>>> [x for x in h]
[(0, 2000), (1, 2001), (2, 2002), (3, 2003), (4, 2004)]
Kennt jemand einen Weg, um das gewünschte Ergebnis in Python 2.5 zu erzielen?
Vielen Dank,
Jeff
Antworten:
Wie Sie bereits erwähnt haben, ist dies in Python 2.6 oder höher unkompliziert:
Python 2.5 und älter unterstützen den
start
Parameter nicht. Stattdessen können Sie zwei Bereichsobjekte erstellen und diese komprimieren:Ergebnis:
Wenn Sie einen Generator anstelle einer Liste erstellen möchten, können Sie stattdessen izip verwenden.
quelle
izip
undxrange
wäre näher zu zählenenumerate(iterable, start=1)
ab Python 2.6 verwenden.Um dies der Nachwelt zuliebe hier zu formulieren, wurde in 2.6 der Parameter "start" hinzugefügt, um wie folgt aufzuzählen:
enumerate(sequence, start=1)
quelle
sequence[i]
in Ihrem Code.Einfach, definieren Sie einfach Ihre eigene Funktion, die das tut, was Sie wollen:
quelle
Python 3
Offizielle Dokumentation:
enumerate(iterable, start=0)
Sie würden es also so verwenden:
quelle
Der einfachste Weg, in Python 2.5 genau das zu tun, worüber Sie fragen:
Wenn Sie eine Liste wünschen, wie Sie scheinen, verwenden Sie
zip
anstelle vonit.izip
.(Übrigens ist der beste Weg, eine Liste aus einem Generator oder einem anderen iterierbaren X zu erstellen, in der Regel nicht
[x for x in X]
, sondernlist(X)
).quelle
Funktioniert jetzt
h = list(enumerate(xrange(2000, 2005), 1))
.quelle
Aufzählung ist trivial, ebenso wie die Neuimplementierung, um einen Start zu akzeptieren:
Beachten Sie, dass dies den Code nicht durch Aufzählung ohne Startargument unterbricht.
Alternativ kann dieser Oneliner eleganter und möglicherweise schneller sein, bricht jedoch andere Verwendungszwecke der Aufzählung:Letzteres war purer Unsinn. @ Duncan hat den Wrapper richtig gemacht.
quelle
quelle
h = [(i + 1, x) for i, x in enumerate(xrange(2000, 2005))]
quelle
++
: das ist der Weg, um es zu tunOk, ich fühle mich hier ein bisschen dumm ... was ist der Grund, es nicht einfach mit so etwas zu machen
[(a+1,b) for (a,b) in enumerate(r)]
? Wenn Sie nicht funktionieren, auch kein Problem:quelle
Da dies etwas ausführlich ist, würde ich empfehlen, eine eigene Funktion zu schreiben, um sie zu verallgemeinern:
quelle
Ich weiß nicht, wie diese Beiträge möglicherweise komplizierter gemacht werden könnten als die folgenden:
quelle