Merhaba, python'da iki listeye sahip olduğumu ve her iki listeden de ortak değerleri kaldırmak istediğimizi varsayalım. Potansiyel bir çözümdür: Doğru görünüyor ama değilPython'daki iki listeden ortak değerleri kaldırma
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)
. Nedeni, sanırım, listeden bir öğeyi kaldırarak dizin yinelenmeye devam ediyor. Bu nedenle, değerlerin birbirine yakın olduğu listelerdeki iki ortak değer için, daha sonraki değerleri kaçırmayacağız (kod, üzerinde yineleme yapmayacaktır). sonucu olacaktır:
>>> x
[1, 3, 5, 6, 8, 9, 10]
>>> y
[43, 3123, 543, 76, 879, 32, 14241, 342, 3]
yüzden değerini
'3'
eksik.
Bu davranışın nedeni, bahsettiğim şey mi? Yoksa yanlış bir şey mi yapıyorum?
Evet, bu, üzerinde yineleme yaparken bir nesneyi değiştirerek karşılaşacağınız problemdir. –
Lütfen bu soruya bir göz atın: [Yinelenen bir listeden öğeleri kaldırın] (https://stackoverflow.com/questions/1207406/remove-items-from-a-list-while-iterating) – direprobs
Kesinlikle tavsiye edilmez Yinelediğiniz değeri değiştirin. Bu, kodunuzun ne yaptığını anlamaya çalışan herkes için döngü akışını belirlemeyi zorlaştırabilir. Bu gibi durumlarda genellikle listenizin (veya başka bir yinelenen nesnenin) ayrı bir kopyasında değişiklik yapılması veya listeye dilimlenmesi için bir indeks üzerinde yineleme yapılması önerilir: 'menzil için i (len (x)): print (x [i]) ' – Aaron