2010-12-15 14 views
6

Also, ich merke, dass Aufruf array[:-1] das Array klonen wird.Python-Schleife zu [: -1]

Angenommen, ich habe ein großes Array mit etwa 3000 Elementen. Ich möchte nicht, dass es geklont wird, wenn ich darüber iteriere! Ich möchte nur zum vorletzten wiederholen.

for item in array[ :-1 ] : 
    # do something with the item 

So kann ich auf eine Zählervariable zurückgreifen,

for c in range(0, len(array) - 1) : 
    # do something with array[ c ] 

oder gibt es Art und Weise zu machen/wird array[:-1] Syntax effizient sein?

+1

möglich Duplikat [Kann ich eine „Ansicht“ auf einer Python-Liste erstellen?] (http://stackoverflow.com/questions/3485475/can-i-create-a-view-on-a-python-list) –

+2

Leider, die "andere Frage" fehlt ganz auf "itertools". Daher stimme ich nicht zu, diese Frage zu schließen. –

+0

@pst würde nicht das "Richtige tun" sein, um eine bessere Antwort auf die andere Frage zu posten? –

Antwort

6
for item in itertools.islice(array, len(array) - 1): 
4

Check out itertools.islice wollen:

from itertools import islice 
for item in islice(array, 0, len(array) - 1): 
    # do something with item 

Hier geht es um die Hälfte von dem, was du willst; es beseitigt die Notwendigkeit, array[i] zu sagen, aber nicht die Notwendigkeit, len(array) - 1 zu spezifizieren.

Für was es wert ist, 3000 Artikel ist nichts zu einem modernen Computer, ich würde keine Sorge über die Ineffizienz, es sei denn, Ihr Programm ist spürbar langsam und Sie haben es profiliert, um festzustellen, dass dieser Code ein Faktor ist.

2

Denn wenn Sie wollen nicht/nicht/nicht wissen, die Länge der Sequenz:

def allbutlast(seq): 
    it = iter(seq) 
    el = next(it) 
    for e in it: 
    yield el 
    el = e 

for i in allbutlast([1, 2, 3]): 
    print i 
Verwandte Themen