2009-07-08 4 views
0

Ok das ist mein Problem. Ich versuche, so etwas wie diese:Reallokation Liste in Python

for i in big_list: 
    del glist[:] 

    for j in range(0:val) 
     glist.append(blah[j]) 

Die Idee ist, die Liste zurückgesetzt und es für den nächsten Satz von Datenpunkten wiederverwenden. Das Problem ist, aus irgendeinem Grunde, wenn die erste Liste 3 Punkte hat,

glist[0] 
glist[1] 
glist[2] 

Die nächste Liste von Index weiterhin 3 und speichert die letzten drei Elemente in dieser Indizes

glist[0] = 4th elem of new list 
glist[1] = 5th elem of new list 
glist[2] = 6th elem of new list 
glist[3] = 1st elem of new list 
glist[4] = 2nd elem of new list 
glist[5] = 3rd elem of new list 

I‘ Sicher ist es ein Problem mit zugewiesenem Speicherplatz. Aber wie kann ich diesen del g_list erreichen [:] so das Ergebnis ist,

glist[0] = 1st elem of new list 
glist[1] = 2nd elem of new list 
glist[2] = 3rd elem of new list 
glist[3] = 4th elem of new list 
glist[4] = 5th elem of new list 
glist[5] = 6th elem of new list 

Zuweisung Variable aus Schleife ist keine Option. Irgendwelche Ideen?

+0

Ihre Code-Snippet sehr wenig Sinn macht. Könnten Sie Code schreiben, der näher an dem ist, was Sie wirklich tun wollen? big_list und val sind undefiniert und ich werde nie benutzt. –

+0

"Die Zuweisung von Variablen innerhalb der Schleife ist keine Option." - Könnten Sie eine Zusammenfassung geben, warum Sie das sagen? Wenn es aus Performance-Gründen ist, denke ich, dass Sie eine Profilerstellung in Betracht ziehen sollten, bevor Sie die Annahme machen, dass dies schneller sein wird. –

+0

Der Code in Ihrem Beispiel hat diese Effekte nicht, Sie müssen sie durch Ihren tatsächlichen Code ersetzen. Aber ich vermute, dass Sie in der Tat in der gleichen Zeit modifizieren und Looping über glitzern. Das könnte solche Effekte haben. –

Antwort

4

Ändern del glist[:] zu glist = []. Sie müssen in Python nicht "wiederverwenden" oder "neu zuweisen", der Müllcontainer kümmert sich darum.

Außerdem verwenden Sie in beiden Schleifen 'i' als Schleifenvariable. Das wird Sie früher oder später verwirren. :)

+0

Ich benutzte das mit zu beginnen und dann mit del ersetzt, aber beide nicht funktioniert – grobartn

+1

Ich denke, er war seinen tatsächlichen Code paraphrasieren, aber ich kann falsch sein +1 auf jeden Fall –

+0

In der Tat, ich scheinen zu erinnern, irgendwo zu lesen dass es tatsächlich schneller ist, die Liste einfach zu zerstören und neu zuzuordnen, als sie neu zuzuweisen. –

1

del glist[:] funktioniert versuchen, eine Liste zum Löschen. Sie müssen uns Ihren genauen Code zeigen. Wie unten gezeigt, tritt das von Ihnen beschriebene Verhalten nicht auf. Die append nach den del a[:] legt das Element am Index 0.

>>> a = [1,2,3] 
>>> del a[:] 
>>> a 
[] 
>>> a.append(4) 
>>> a 
[4]