Python列表删除错误
我得到了一个我不理解的错误,即9没有从我的列表中删除:Python列表删除错误,python,python-2.7,Python,Python 2.7,我得到了一个我不理解的错误,即9没有从我的列表中删除: new_list = [4,6,9,8] for j in new_list: if j * 2 >= 10: new_list.remove(j) print new_list >> [4, 9] 你不能改变你正在迭代的列表。请使用它的副本: new_list = [4,6,9,8] for j in new_list[:]: if j * 2 >= 10:
new_list = [4,6,9,8]
for j in new_list:
if j * 2 >= 10:
new_list.remove(j)
print new_list
>> [4, 9]
你不能改变你正在迭代的列表。请使用它的副本:
new_list = [4,6,9,8]
for j in new_list[:]:
if j * 2 >= 10:
new_list.remove(j)
print new_list
这将产生:
[4]
正如@blhsing所指出的,你不能改变你正在迭代的列表,因为你会得到不可预测的结果。但是,您可以使用列表理解来构建新列表,例如:
old_list = [4,6,9,8]
new_list = [j for j in old_list if j*2 < 10]
old_list=[4,6,9,8]
新的_列表=[j代表旧_列表中的j,如果j*2<10]
好吧,结果是完全可预测的,您可以使用各种方法(向后迭代、迭代索引并在变异后注意调整索引等)来实现。我应该更一般一些,因为list
它可能是可预测的。但是它对于其他数据结构是未定义的,并且不适用于其他数据结构,例如set
,其中生成了RuntimeError
。[我发现rhettinger的一条评论说修改列表
迭代器已经定义,但我在文档中找不到它]。