Вы не должны изменять список, который вы выполняете, это приводит к неожиданному поведению (поскольку итератор использует индексы внутри, а те, которые изменяются, удаляются элементами). Что вы можете сделать, это перебрать копию из listA
:
for i in listA[:]:
if i >= 2:
listB.append(i)
listA.remove(i)
Пример:
>>> listA = [1,2,3]
>>> listB = []
>>> for i in listA[:]:
... if i >= 2:
... listB.append(i)
... listA.remove(i)
...
>>> listA
[1]
>>> listB
[2, 3]
Однако, это часто намного чище идти функциональный путь, а не изменять исходный список на всех , вместо этого просто создайте новый список со значениями, которые вам нужны. Вы можете использовать списочные, чтобы сделать это элегантно:
>>> 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]
Что вы должны сделать, это построить выходные списки, которые вы хотите, и тогда, возможно, выбросить оригинал (или назначить на него), если вам больше не нужно. –
@Karl: Я просто добавил понимание списка, чтобы сделать именно это. –
@NiklasB. Понимание списка было именно тем, что я закончил делать, но я не был уверен, почему у меня возникла проблема изначально. – devinpleuler