2016-05-03 9 views
1

Hier ist meine Funktion von Python:Warum Drucker aus der Funktion unterschiedlich ist

def Ggen(word): 
    result = [] 
    while(len(word)!=1): 
     a = word.pop() 
     b = word 
     temp = (a,b) 
     print temp 
     result.append(temp) 
    return result 

Angenommen, ich habe Daten test = ['f','c','a','m','p'] nennen.

Mein Ergebnis von print in Funktion erzeugt wird:

('p', ['f', 'c', 'a', 'm']) 
('m', ['f', 'c', 'a']) 
('a', ['f', 'c']) 
('c', ['f']) 

Aber wenn ich Ggen(test) laufen habe ich diese statt:

[('p', ['f']), ('m', ['f']), ('a', ['f']), ('c', ['f'])] 

Was meinen Code passieren. Ist jemand, wie man das ähnliche Ergebnis von oben bekommt?

+1

'b = Wort' ... Denken Sie nur darüber nach. Was ist "Wort"? –

+1

Listen sind veränderbar. Sie mutieren die Liste in der Schleife. Sie drucken sie, bevor Sie sie mutieren, geben aber einen endgültigen Wert zurück, der gründlich mutiert wurde. Warum nicht Kopien der Liste in verschiedenen Phasen erstellen, wenn Sie die unmutierten Versionen von früher in der Schleife beibehalten möchten? Wie dem auch sei, Sie erstellen gerade eine ganze Reihe von Aliasen für dieselbe Liste. –

+0

Wort ist nur eine Liste von Elementen. Mein Algorithmus löschte jedes Mal die Liste und erstellte ein (Schlüssel, Wert), wo der Schlüssel pop() ist, während der Wert die verbleibenden Daten in der Liste ist. Ich wiederhole, bis das Ergebnis wie der Druck sollte – someone

Antwort

4

Jedesmal, wenn man word.pop() Sie verändern die Referenz der Liste, die innerhalb result enthalten ist. Also, Sie drucken die Zwischenwerte, aber was Sie schließlich zurückgeben, wird die word Liste sein, die die while-Schleife beendet hat.

Wenn Sie möchten, was Sie sehen, gedruckt werden, müssen Sie eine Kopie der Liste jedes Mal, wenn Sie pop daraus machen.

def Ggen(word): 
    result = [] 
    while(len(word)!=1): 
     result.append((word.pop(),word[:])) 
    return result 
+0

Dies ist Arbeit und danke für die Erklärung ^^ – someone

+0

Sie können Ihren Dank zeigen, indem Sie die Frage mit dem Häkchen daneben akzeptieren. –

Verwandte Themen