Hi sagen wir, ich habe zwei Listen in Python und ich möchte gemeinsame Werte aus beiden Listen entfernen. Eine mögliche Lösung ist:Entfernen von gemeinsamen Werten aus zwei Listen in Python
x = [1, 2, 3, 4, 5, 6, 7, 8]
y = [43, 3123, 543, 76, 879, 32, 14241, 342, 2, 3, 4]
for i in x:
if i in y:
x.remove(i)
y.remove(i)
scheint es richtig, aber es ist nicht. Der Grund liegt vermutlich darin, dass der Index durch das Entfernen eines Elements aus der Liste weiter iteriert. Daher werden für zwei gemeinsame Werte in den Listen, in denen die Werte nahe beieinander liegen, die späteren Werte fehlen (der Code wird nicht iterieren). Das Ergebnis wäre:
>>> x
[1, 3, 5, 6, 8, 9, 10]
>>> y
[43, 3123, 543, 76, 879, 32, 14241, 342, 3]
So fehlen wir den Wert '3'
.
Ist der Grund für dieses Verhalten der, den ich erwähnt habe? oder mache ich etwas anderes falsch?
Ja, dies ist genau das Problem, dem Sie begegnen werden, wenn Sie ein Objekt ändern, während Sie darüber iterieren. –
Bitte werfen Sie einen Blick auf diese Frage: [Entfernen Sie Elemente aus einer Liste beim Iterieren] (https://stackoverflow.com/questions/1207406/remove-items-from-a-list-while-iterating) – direprobs
Es wird dringend davon abgeraten Ändere den Wert, den du wiederholst. Dies kann es schwierig machen, den Fluss der Schleife für jeden zu bestimmen, der versucht zu verstehen, was der Code tut. In solchen Fällen ist es normalerweise ratsam, Änderungen an einer separaten Kopie Ihrer Liste (oder eines anderen iterierbaren Objekts) vorzunehmen oder über einen Index zu iterieren, um in Ihre Liste zu schneiden: 'für i im Bereich (len (x)): print (x [i]) ' – Aaron