Python 为什么不从列表中删除特定值?

Python 为什么不从列表中删除特定值?,python,python-3.x,Python,Python 3.x,我正在尝试完成以下简短练习: 迭代给定的列表,并检查给定元素是否已作为键的值存在于字典中,如果不将其从列表中删除 我的解决方案似乎可以从列表中删除所有项,而在字典中,除了一个值之外,这些项不作为值存在95。怎么可能呢 当我进行调试时,在循环的迭代过程中,Python似乎跳过了该值(95): 实际结果: [47, 69, 76, 95, 97] [47, 69, 76, 97] 预期成果: [47, 69, 76, 95, 97] [47, 69, 76, 97] 试试这个 rollNum

我正在尝试完成以下简短练习: 迭代给定的列表,并检查给定元素是否已作为键的值存在于字典中,如果不将其从列表中删除

我的解决方案似乎可以从列表中删除所有项,而在字典中,除了一个值之外,这些项不作为值存在<代码>95。怎么可能呢

当我进行调试时,在循环的迭代过程中,Python似乎跳过了该值(
95
):

实际结果:

[47, 69, 76, 95, 97]
[47, 69, 76, 97]
预期成果:

[47, 69, 76, 95, 97]
[47, 69, 76, 97]
试试这个

rollNumber = [47, 64, 69, 37, 76, 83, 95, 96, 97]
sampleDict = {"Jhon": 47, "Emma": 69, "Kelly": 76, "Jason": 97}

rollNumber = [i for i in rollNumber if i in sampleDict.values()]

print(rollNumber)
结果:
[47,69,76,97]
试试这个

rollNumber = [47, 64, 69, 37, 76, 83, 95, 96, 97]
sampleDict = {"Jhon": 47, "Emma": 69, "Kelly": 76, "Jason": 97}

rollNumber = [i for i in rollNumber if i in sampleDict.values()]

print(rollNumber)
结果:
[47、69、76、97]

不要修改您正在迭代的列表。而是迭代rollNumber[:]:@Devesh中当前_项的列表副本
。如果你做得好的话,修改一个列表绝对没有什么错。是的,但是对一个新手来说,正确地修改列表是不太明显的,所以最好坚持做一些简单的事情,比如在副本上迭代并修改原始的IMO@MadPhysicist@Devesh. 啊,是的,“万无一失”的方法。正确的。只是开玩笑。这样真的安全多了。哈@MadPhysicast我不太确定你是否同意我的观点。不要修改你正在迭代的列表。而是迭代rollNumber[:]:
@Devesh中当前_项的列表副本
。如果你做得好的话,修改一个列表绝对没有什么错。是的,但是对一个新手来说,正确地修改列表是不太明显的,所以最好坚持做一些简单的事情,比如在副本上迭代并修改原始的IMO@MadPhysicist@Devesh. 啊,是的,“万无一失”的方法。正确的。只是开玩笑。这样真的安全多了。哈哈,物理学家,我不太确定你是否同意我的观点