Was ist in der Regel als mehr Pythonic/besser/schneller zu bedienen, die Methode "reverse" oder der "umgekehrte" built-in-Funktion?
Beide in Aktion:
_list = list(xrange(4))
print _list
rlist = list(reversed(_list))
print rlist
_list.reverse()
print _list
InformationsquelleAutor rectangletangle | 2011-07-24
Hängt davon ab, ob Sie umkehren möchten, in der Liste in-place (d.h. ändern der Liste) oder nicht. Keine anderen wirklichen Unterschied.
Oft mit
reversed
führt zu schöner code.InformationsquelleAutor Katriel
foo.reverse()
tatsächlich kehrt die Elemente im container.reversed()
nicht tatsächlich reverse-nichts, es nur ein Objekt zurück, das verwendet werden kann, Durchlaufen die container die Elemente in umgekehrter Reihenfolge. Wenn es das ist, was Sie brauchen, ist es oft schneller, als eigentlich die Umkehrung der Elemente.InformationsquelleAutor kindall
Scheint es einen großen Unterschied. Ich dachte wirklich, es ist die andere Weise Runde.
Warum ist die Neuordnung der Werte in einer Liste schneller als das erstellen einer neuen aus einer iterator ?
list(reversed(_list))
, obwohl dielist
Konstruktor ist C-code, muss über dasreverseiterator
's API anstatt nur zu tauschen Zeiger in einem engen C-Schleife.Wenn Sie müssen überprüfen, ob die
listreverseiterator
dann haben Sie zu prüfen, für alles... schließlich wird es irgendwie schwerfällig und verlangsamt kurz kopiert. Neben der soll-zu-sein-gemeinsame Fall fürreversed
ist, wenn du gehst zu iterieren ohnehin und brauchen nicht zum erstellen einer temporären.Wenn Sie etwas zu tun mit den Listen, ändert sich das Bild. Vergleichen
for i in reversed(_list):...
und_list.reverse();for i in _list:...
, die ehemalige ist ein wenig schneller.InformationsquelleAutor Niklas R
Ohne zu wissen, echte Statistiken über die Leistung,
_list.reverse()
ändert die Liste selbst, in der Erwägung, dassreversed(_list)
gibt einen iterator bereit zum Durchlaufen der Liste in umgekehrter Reihenfolge. Das ist ein großer Unterschied sich.Wenn das nicht ein problem,
object.reverse()
scheint mehr lesbar für mich, aber vielleicht haben Sie bestimmte Anforderungen an Geschwindigkeit. Und wennreverse()
gehören nicht zu den 80% der software, die die Ressourcen verbraucht, ich würde das nicht stören (als Faustregel).reversed
kopiert nicht, es gibt einen iterator.du hast Recht. Ich es behoben 🙂
InformationsquelleAutor elitalon