Wenn ich neue Objekte in meine Liste einfüge, kopiert das neueste hinzugefügte Objekt alle zuvor hinzugefügten Objekte der Liste. Ich habe ein kleines Python-Programm, das auf einem RPI3 läuft und Eingaben von 4 Tasten nimmt.list.append und list.expand neue Objektkopien über alle vorherigen Einträge python
full = []
schedule = ['day', 'activity', 'clock']
n = 4
def setDay(x):
while True:
input_state18 = GPIO.input(18)
input_state23 = GPIO.input(23)
input_state24 = GPIO.input(24)
input_state25 = GPIO.input(25)
if input_state23 == False:
print('Monday')
time.sleep(0.2)
x[0] = 'Monday'
break
if input_state18 == False:
print('Tuesday')
time.sleep(0.2)
x[0] = 'Tuesday'
break
if input_state24 == False:
print('Wednesday')
time.sleep(0.2)
x[0] = 'Wednesday'
break
if input_state25 == False:
print('Thursday')
time.sleep(0.2)
x[0] = 'Thursday'
break
def setActivity(x):
#same as setDay
def setClock(x):
#same as setDay
if __name__ == "__main__":
i = 0
while i < n:
setDay(schedule)
setActivity(schedule)
setClock(schedule)
full.insert(i, schedule)
i += 1
#put schedule into first spot in total list
print(full)
Als ich führen Sie das Programm, das ich die folgende Ausgabe in meinem Terminal erhalten:
Monday
Study
19:00
Tuesday
Training
17:00
Monday
Swimming
19:00
Thursday
Training
17:00
[['Thursday', 'Training', '17:00'], ['Thursday', 'Training', '17:00'], ['Thursday', 'Training', '17:00'], ['Thursday', 'Training', '17:00']]
Also das Problem um meine while-Schleife in der Hauptfunktion befindet. Ich habe es auch mit list.append versucht, aber ich habe die gleiche Ausgabe bekommen. Wie ändere ich meine While-Schleife, damit die hinzugefügten Listen nicht die vorherige ersetzen?
Das Anhängen von 'schedule' erstellt keine Kopie; Sie verwenden die gleiche Liste immer wieder. Erstellen Sie eine * neue * Liste für jede Iteration (verschieben Sie 'schedule = [...]' in die Schleife) oder erstellen Sie eine Kopie (siehe das Duplikat). –