Python ganze Rückwärtsliste, die den Index angibt

8

Ich habe eine Liste, in der ich die letzten Elemente in umgekehrter Reihenfolge erhalten möchte:

%Vor%

Ich kann die Liste mit lst[::-1] umkehren und die ganze Liste umkehren. Aber ich will die umgekehrte Liste nur bis zu einem bestimmten Index. Ich kann einen Index angeben:

%Vor%

und erhalten:

%Vor%

ist die ursprüngliche Liste bis zum angegebenen Index in umgekehrter Reihenfolge. Dies funktioniert für jeden Index & gt; 0. Aber wenn ind 0 ist (dh die ganze Liste sollte in umgekehrter Reihenfolge zurückgegeben werden), verursacht dies ein Problem:

%Vor%

gibt zurück:

%Vor%

weil mein Endplatz gleich ist wie mein Anfang (-1). Meine erwartete / gewünschte Ausgabe wäre [4, 3, 2, 1]

Ich weiß, ein einfacher Workaround wäre, einfach eine if-Anweisung zu setzen, um den Fall zu erfassen, wo ind 0 ist, oder es in zwei Schritten (index, dann umgekehrt), aber es fühlt sich an, als wäre dies mit dem Indexsystem möglich Python. Liege ich falsch?

    
Kewl 27.03.2017, 19:10
quelle

1 Antwort

5

None kann explizit angegeben werden, um "zu beenden" anzugeben (für einen negativen Schritt ist das "Ende") der Anfang der Sequenz):

%Vor%

Sie haben zwar gesagt, dass Sie den zweistufigen Ansatz vermeiden, aber es ist einfacher, dies zu tun. es sei denn, Sie erwarten, dass der Slice sehr groß ist. Der Einfachheitsgewinn ist also jeden trivialen Performanceverlust wert, den Sie erleiden könnten:

%Vor%

Für den Fall, dass bei trivialen Microbenchmarks jeder ind -Wert gleich häufig ist, ist der One-Step-Ansatz zwar schneller, aber der Unterschied ist ziemlich klein, es sei denn, Ihr list ist riesig. Zum Beispiel für Ihre vier Elemente list mit ipython für Microbenchmarking:

%Vor%

Das ist langsamer, aber die Kosten liegen nur bei 300 ns. Selbst wenn lst 4000 ist, beträgt der Unterschied 18 vs 35,5 ms pro Schleife; Zugegeben, das ist fast doppelt so viel Zeit, aber wenn es nicht leistungskritisch ist (oder die Listen normalerweise kleiner sind), würde ich das als akzeptabel bezeichnen, da es die Last des Betreuers erleichtert, "slice from ind to end" zu lesen und dann umzukehren die kompliziertere Struktur der einstufigen Scheibe.

    
ShadowRanger 27.03.2017, 19:20
quelle

Tags und Links