listA = [1,2,3]
listB = []
print listA
print listB
for i in listA:
if i >= 2:
listB.append(i)
listA.remove(i)
print listA
print listB
Run Code Online (Sandbox Code Playgroud)
为什么这只添加和删除元素"2"?
此外,当我注释掉"listA.remove(i)"时,它按预期工作.
Nik*_* B. 13
您不应该修改正在迭代的列表,这会导致令人惊讶的行为(因为迭代器在内部使用索引,并且通过删除元素来更改这些索引).你可以做的是要遍历一个复制的listA:
for i in listA[:]:
if i >= 2:
listB.append(i)
listA.remove(i)
Run Code Online (Sandbox Code Playgroud)
例:
>>> listA = [1,2,3]
>>> listB = []
>>> for i in listA[:]:
... if i >= 2:
... listB.append(i)
... listA.remove(i)
...
>>> listA
[1]
>>> listB
[2, 3]
Run Code Online (Sandbox Code Playgroud)
但是,使用功能方式而不是完全修改原始列表通常要简洁得多,而只需创建一个包含所需值的新列表.您可以使用列表推导来优雅地执行此操作:
>>> 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]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3601 次 |
| 最近记录: |