2017-02-02 5 views
0

Ich habe mehrere Listen mit Listen, und ich möchte in der Lage sein, die Elemente in den Listen in meinem Code zu bearbeiten und sie später alle auf ihre Anfangswerte zurückzusetzen.Python Zurücksetzen von Elementen in einer Liste auf ihre Anfangswerte

Hier ist ein Beispiel:

list_a = [0, 1, 2] 
list_b = [list_a, 3, 4] 
list_c = [6, 7] 
list_d = [8, 9] 
lists = [0, list_b, 5, list_c, list_d] 
#As you can see, lists are of varying length, and sometimes nested multiple times. 

print(lists) 
Out>>> [0, [[0, 1, 2], 3, 4], 5, [6, 7], [8, 9]] 

#Currently, I'm saving the important items of "lists" in the first item, like this: 
lists[0] = lists[1:] 

#Then I edit the values of various items, like this: 
lists[1][0][2] = 0 
lists[2] = 0 
lists[3][1] = 0 
lists[4][1] = 0 

print(lists[1:]) 
Out>>> [[[0, 1, 0], 3, 4], 0, [6, 0], [8, 0]] 

#Then I try to reset those values to the originals that I stored in lists[0] 
lists[1:] = lists[0] 

print(lists[1:]) 
Out>>> [[[0, 1, 0], 3, 4], 5, [6, 0], [8, 0]] 

Wie Sie sehen können, ist diese Methode funktioniert für die Liste [2], weil das Element ist ein Wert, und nicht um eine verschachtelte Liste. Es scheint, dass, obwohl ich [1:] verwende, um eine Kopie in Listen [0] zu erstellen, die Verweise auf verschachtelte Listen, was kopiert wird, und nicht die Werte in diesen verschachtelten Listen.

Wie kann ich die Werte von Listen [1:] in Listen [0] und dann wieder zurückkopieren, ohne dass beide Kopien auf den gleichen Index verweisen?

Oder gibt es vielleicht eine einfachere Möglichkeit, das gleiche beabsichtigte Ergebnis zu erzielen, indem alle Elemente in Listen auf ihre ursprünglichen Werte zurückgesetzt werden?

Antwort

0

Verwenden Sie persistent data structures. Das Vermeiden von Mutationen ermöglicht ein größeres Teilen und vermeidet gruselige Aktionen in einer Entfernung wie dieser.

Zum Beispiel:

>>> from pyrsistent import pvector 
>>> list_a = pvector([0, 1, 2]) 
>>> list_b = pvector([list_a, 3, 4]) 
>>> list_c = pvector([6, 7]) 
>>> list_d = pvector([8, 9]) 
>>> lists = pvector([0, list_b, 5, list_c, list_d]) 
>>> print(lists) 
pvector([0, pvector([pvector([0, 1, 2]), 3, 4]), 5, pvector([6, 7]), pvector([8, 9])]) 
>>> lists = lists.set(0, lists[1:]) 
>>> lists = lists.transform([1, 0, 2], 0) 
>>> lists = lists.transform([2], 0) 
>>> lists = lists.transform([3, 1], 0) 
>>> lists = lists.transform([4, 1], 0) 
>>> print(lists[1:]) 
pvector([pvector([pvector([0, 1, 0]), 3, 4]), 0, pvector([6, 0]), pvector([8, 0])]) 
>>> lists = lists[:1] + lists[0] 
>>> print(lists[1:]) 
pvector([pvector([pvector([0, 1, 2]), 3, 4]), 5, pvector([6, 7]), pvector([8, 9])]) 
>>> 

Auch Python hat nicht-Liste Variablen. Das erste Element einer Liste zufälliger Werte ist ein seltsamer Ort, um Dinge zu "retten". In Anbetracht des oben genannten könnten Sie die ursprünglichen Werte in einer anderen Variablen beibehalten. Zum Beispiel:

>>> list_a = pvector([0, 1, 2]) 
>>> list_b = pvector([list_a, 3, 4]) 
>>> list_c = pvector([6, 7]) 
>>> list_d = pvector([8, 9]) 
>>> lists = original = pvector([list_b, 5, list_c, list_d]) 

Jetzt können Sie rumschraube mit lists und wenn man genug davon, lists = original bringt Sie direkt zurück in den Ausgangszustand.

Verwandte Themen