Ich habe es wirklich schwer zu versuchen, das Verhalten dieses Codes unten zu verstehen. In Python 3.6List.append/extend + Operatoren und + =
Der folgende Beispielcode ist eine Abstraktion meines tatsächlichen Codes. Ich habe dies getan, um mein Problem besser zu beschreiben. Ich versuche, eine Liste zu einer anderen Liste hinzuzufügen. Ergebnis in einer zweidimensionalen Liste. Zum Zweck der Überprüfung der Mitgliedschaft dieser Liste zu einem späteren Zeitpunkt. Obwohl ich nicht in der Lage bin, meine Liste so hinzuzufügen, wie ich Eg möchte.
a_list = []
another_list = [7,2,1]
a_list.DONT_KNOW(another_list)
another_list = [7,3,1]
Ergebnisse:
a_list
[[7,2,1]]
another_list
[7,3,1]
Beispiel meiner Frage:
class foo:
def __init__(self):
self.a_list = []
self.another_list = [0]
####### Modifying .extend/.append##############
self.a_list.append(self.another_list) # .append() | .extend(). | extend([])
###############################################
def bar(self):
######## Modifying operator########
self.another_list[0] += 1 # += | +
###################################
print('a_list = {} another_list = {} '.format(self.a_list, self.another_list))
def call_bar(f, repeats):
x = repeats
while x > 0:
x -= 1
foo.bar(f)
f = foo()
call_bar(f,3)
5 Mal wiederholt. Ändern der list.function und des increment-Operators. Ausgänge:
# .append() and +=
a_list = [[1]] another_list = [1]
a_list = [[2]] another_list = [2]
a_list = [[3]] another_list = [3]
# .extend() and +=
a_list = [0] another_list = [1]
a_list = [0] another_list = [2]
a_list = [0] another_list = [3]
# .append() and +
a_list = [[1]] another_list = [1]
a_list = [[2]] another_list = [2]
a_list = [[3]] another_list = [3]
#.extend() and +
a_list = [0] another_list = [1]
a_list = [0] another_list = [2]
a_list = [0] another_list = [3]
#.extend([]) and +
a_list = [[1]] another_list = [1]
a_list = [[2]] another_list = [2]
a_list = [[3]] another_list = [3]
Beachten Sie, dass in allen diesen Beispielen, wenn ich die zweidimensionale Anordnung bekommen (ich brauche). Die Werte in a_list ändern sich bei der Bearbeitung another_list. Wie bekomme ich den Code dazu?
#SOME METHOD I DON'T KNOW
a_list = [[0]] another_list = [1]
a_list = [[0]] another_list = [2]
a_list = [[0]] another_list = [3]
a_list.append (another_list [:]) – happydave
Das funktioniert tatsächlich. Die Verwendung eines Slice muss eine Kopie zurückgeben Ich nehme es? –
Ja, es kopiert jeden Eintrag in der Liste. Manche Leute halten es für den idiomatischen Weg, eine Liste zu kopieren, manche halten es einfach für hässlich. – happydave