我的 for 循环没有根据条件删除数组中的项目?Python

Ale*_*her 5 python python-3.x

我有一个数组(移动)。我想迭代我的移动数组并为每个元素设置一个条件。条件是,如果元素中的任何一个数字为负数,那么我想从 moves 数组中删除该元素。循环无法正确删除我的项目。但是如果我通过完全相同的循环运行它两次,那么它将删除最后一个元素。这对我来说毫无意义。使用Python 3.6

moves = [[3,-1],[4,-1],[5,-1]]
for move in moves:
    if move[0] < 0 or move[1] < 0:
        moves.remove(move)
Run Code Online (Sandbox Code Playgroud)

如果运行此代码,移动将以 [[4,-1]] 的结果结束,但是如果您再次通过完全相同的 for 循环运行此结果,则结果为 []

我还尝试使用更多元素来执行此操作,但由于某种原因,它只是没有抓住某些元素。这是 .remove() 的错误吗?这就是我尝试过的...(在此我尝试检测非负数以查看这是否是问题的一部分,但事实并非如此)

moves = [[3,1],[4,1],[5,1],[3,1],[4,1],[5,1],[3,1],[4,1],[5,1]]
    for move in moves:
        if move[0] < 2 or move [1] < 2:
            moves.remove(move)
Run Code Online (Sandbox Code Playgroud)

上面代码的结果是

moves = [[4, 1], [3, 1], [4, 1], [5, 1]]
Run Code Online (Sandbox Code Playgroud)

有任何想法吗???

Nav*_*een 5

您可以迭代列表的副本。[:]这可以通过添加for 循环列表来完成moves[:]

输入

moves = [[3,-1],[4,-1],[5,-11], [2,-2]]
for move in moves[:]:
    if (move[0] < 0) or (move[1] < 0):
        moves.remove(move)

print(moves)
Run Code Online (Sandbox Code Playgroud)

输出

[]
Run Code Online (Sandbox Code Playgroud)