为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

月关宝盒 2021-08-14 21:18:54
我有一个数组(移动)数组。我想遍历我的移动数组并为每个元素设置一个条件。条件是,如果元素中的任何一个数字为负,那么我想从移动数组中删除该元素。该循环无法正确移除我的物品。但是如果我在完全相同的循环中运行它两次,那么它将删除最后一个元素。这对我来说毫无意义。使用 Python 3.6moves = [[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]]有任何想法吗???
查看完整描述

2 回答

?
GCT1015

TA贡献1827条经验 获得超4个赞

您可以遍历列表的副本。这可以通过添加[:]您的 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)

输出


[]


查看完整回答
反对 回复 2021-08-14
?
慕码人8056858

TA贡献1803条经验 获得超6个赞

不要同时迭代和修改。


您可以使用列表合成或filter()获取适合您需要的列表:


moves = [[3,1],[4,-1],[5,1],[3,-1],[4,1],[5,-1],[3,1],[-4,1],[-5,1]]


# keep all values of which all inner values are > 0

f = [x for x in moves if all(e>0 for e in x)]


# same with filter()

k = list(filter(lambda x:all(e>0 for e in x), moves))


# as normal loop

keep = []

for n in moves:

    if n[0]>0 and n[1]>0:

        keep.append(n)


print(keep)


print(f) # f == k == keep  

输出:


[[3, 1], [5, 1], [4, 1], [3, 1]]

Doku for filter()andall()可以在内置函数概述中找到


查看完整回答
反对 回复 2021-08-14
  • 2 回答
  • 0 关注
  • 177 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号