我刚刚在这里阅读了一篇关于如何从两个列表中过滤值的帖子。python:如何根据 1 个列表中的内容从 2 个列表中删除值
我尝试使用for
and自己编写一些代码zip
,但结果是错误的,谁能帮助我理解这一点?
xVar = [1, 2, 3, 4, 5, 6, 7]
yVar = [11, 22, 33, 44, 55, 66, 77]
z = zip(xVar, yVar)
zFiltered = [(x, y) for x, y in z if y < 50]
print zFiltered # Correct, prints [(1, 11), (2, 22), (3, 33), (4, 44)]
for (x, y) in z:
if y > 50:
z.remove((x, y))
print z # Wrong, prints [(1, 11), (2, 22), (3, 33), (4, 44), (6, 66)]
为什么会这样?我尝试使用pdb
后发现 ,z.remove((5, 55))
的(x, y)
值是(7, 77)
,(6, 66)
被跳过,我假设for
是通过索引分配(x, y)
,删除(5, 55)
会违反原始索引,如果是这样,我怎么能在这里用for
语句做同样的事情?这里还有其他陷阱吗?