Effiziente iteration über slice in Python

Wie effizient sind die Iterationen über slice-Operationen in Python? Und wenn eine Kopie ist unvermeidlich mit Scheiben, gibt es eine alternative?

Ich weiß, dass eine slice-operation über eine Liste ist O(k), wobei k die Größe der Scheibe.

x[5 : 5+k]  # O(k) copy operation

Jedoch bei der Iteration über einen Teil einer Liste ist, finde ich, dass die sauberste (und die meisten Pythonic?) Weg, dies zu tun (die zimmerreserviereung, ohne das resort zu den Indizes) ist zu tun:

for elem in x[5 : 5+k]:
  print elem

Aber meine intuition ist, dass diese Ergebnisse noch in eine teure Kopie der Teilliste, anstatt einfach nur die Iteration über die vorhandene Liste.

  • Wenn Sie besorgt sind, zum kopieren der Scheibe, ich denke, die alternative ist, Durchlaufen die Indizes mit range(5, 5 + k).
  • Gefahr! Sie habe schlechte Beratung früher; itertools.islice nicht so funktionieren, wie wir es uns gedacht haben. Wenn Sie eine islice ab 1000000, Python wird die Schleife durch die erste 1000000 Elemente Ihrer Liste, bevor Sie nachgeben nichts. Dies könnte wiederum eine linear-Zeit-Algorithmus quadratische oder schlechter.
InformationsquelleAutor WaelJ | 2013-08-04
Schreibe einen Kommentar