【发布时间】:2019-04-14 13:46:17
【问题描述】:
我有一个数组(移动)数组。我想遍历我的移动数组并为每个元素设置一个条件。条件是,如果元素中的任何一个数字为负数,那么我想从移动数组中删除该元素。循环没有正确删除我的项目。但是如果我通过完全相同的循环运行它两次,那么它将删除最后一个元素。这对我来说毫无意义。使用 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)
如果您运行此代码,移动将以 [[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)
以上代码的结果是
moves = [[4, 1], [3, 1], [4, 1], [5, 1]]
有什么想法吗???
【问题讨论】:
-
不要同时迭代和修改你迭代的列表。
-
那么如何根据条件过滤列表?
-
在你的第二个例子中,什么都不会留下,因为所有元素都有一个内部元素
-
你的第一个例子也不会留下任何东西 - 因为所有元素都包含 1 个小于 0 的元素
-
@PatrickArtner 是的,我知道这是应该发生的,但正如您从输出中看到的那样,这不是正在发生的事情。这就是问题所在:)
标签: python python-3.x