No debe modificar la lista sobre la que está iterando, esto produce un comportamiento sorprendente (porque el iterador usa índices internamente y los modifica eliminando elementos). Lo que puede hacer es iterar sobre una copia de listA
:
for i in listA[:]:
if i >= 2:
listB.append(i)
listA.remove(i)
Ejemplo:
>>> listA = [1,2,3]
>>> listB = []
>>> for i in listA[:]:
... if i >= 2:
... listB.append(i)
... listA.remove(i)
...
>>> listA
[1]
>>> listB
[2, 3]
Sin embargo, a menudo es mucho más limpio a seguir el camino funcional y no modificar la lista original en absoluto , en lugar de simplemente crear una nueva lista con los valores que necesita. Puede utilizar las listas por comprensión de hacerlo con elegancia:
>>> lst = [1,2,3]
>>> small = [a for a in lst if a < 2]
>>> big = [a for a in lst if a >= 2]
>>> small
[1]
>>> big
[2, 3]
Lo que debe hacer es construir las listas de salida que se desea, y entonces tal vez de tirar el original (o asignar sobre él) si ya no lo necesita. –
@Karl: Acabo de agregar una lista de comprensión para hacer exactamente eso. –
@NiklasB. La comprensión de la lista fue exactamente lo que terminé haciendo, pero no estaba seguro de por qué estaba recibiendo el problema inicialmente. – devinpleuler