2016-10-01 5 views
-1

Ich teste eine Umkehrfunktion. Mein Code ist wie folgt:lokale und globale Variable Verwendung in Python

def deep_reverse(L): 

    new_list = [] 
    for element in L: 
     new_list += [element[::-1]] 
    L = new_list[::-1] 


L = [[1, 2], [3, 4], [5, 6, 7]] 
deep_reverse(L) 
print(L) 

ich mein Ausgang L erwarten kann wie sein [[7, 6, 5], [4, 3], [2, 1]], aber es funktioniert nur in meiner Funktion .

Ich konnte es in der globalen Variable nicht ändern. Wie kann ich es möglich machen? Danke

Antwort

1

L ist nur eine lokale Variable und das Zuweisen eines neuen Objekts wird die ursprüngliche Liste nicht ändern; es genügt, den Namen L in der Funktion auf ein anderes Objekt zu zeigen. Siehe Ned Batchelder's excellent explanation about Python names.

Sie könnten alle Elemente ersetzen in die Liste L Referenzen durch stattdessen auf die [:] Identität Scheibe zuweisen:

L[:] = new_list[::-1] 

jedoch wandelbar Sequenzen wie Listen haben eine list.reverse() method, so dass Sie nur die Liste rückgängig machen kann in -ort mit, dass:

L.reverse() 

für jeden sublist das gleiche tun:

def deep_reverse(L): 
    """ assumes L is a list of lists whose elements are ints 
    Mutates L such that it reverses its elements and also 
    reverses the order of the int elements in every element of L. 
    It does not return anything. 
    """ 
    for element in L: 
     element.reverse() 
    L.reverse() 
+0

Vielen Dank. Es hilft mir sehr bei deiner Erklärung! – Julie

Verwandte Themen