Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python列表删除错误_Python_Python 2.7 - Fatal编程技术网

Python列表删除错误

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:

我得到了一个我不理解的错误,即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.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的一条评论说修改
列表
迭代器已经定义,但我在文档中找不到它]。