在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
列表从未被修改;我们只是根据它生成一个新列表,然后替换整个列表。收到了,谢谢!