Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.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中的循环中使用.remove_Python_Python 3.x - Fatal编程技术网

在Python中的循环中使用.remove

在Python中的循环中使用.remove,python,python-3.x,Python,Python 3.x,我尝试了以下代码: arr = [1, 2, 3, 4, 5, 6, 7, 8, 9] for x in arr: if x > 3: arr.remove(x) print(arr) 它给出以下输出: [1, 2, 3, 5, 7, 9] 相反,我认为它会从数组中删除每个大于3的元素。为什么呢?我怎样才能让它删除每一个大于一定数量的元素呢?修改一个正在迭代的列表通常会产生意想不到的结果。更好的选择是创建一个新列表: arr = [x for x in arr if x

我尝试了以下代码:

arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]

for x in arr:
  if x > 3:
    arr.remove(x)

print(arr)
它给出以下输出:

[1, 2, 3, 5, 7, 9]

相反,我认为它会从数组中删除每个大于3的元素。为什么呢?我怎样才能让它删除每一个大于一定数量的元素呢?

修改一个正在迭代的列表通常会产生意想不到的结果。更好的选择是创建一个新列表:

arr = [x for x in arr if x <= 3]

arr=[x代表arr中的x如果x是我被迫为此创建一个新变量的话?我对Python非常陌生,我很难理解为什么会发生这种情况在那个例子中没有创建新变量;我正在重新分配
arr
,您已经使用的变量名。上面的代码与
for
循环的不同之处在于在分配给
arr
之前,通过右侧的理解表达式创建全新的列表。原始的
arr
列表从未被修改;我们只是根据它生成一个新列表,然后替换整个列表。收到了,谢谢!