【发布时间】:2019-10-30 18:08:15
【问题描述】:
我正在尝试完成以下简短练习: 迭代给定列表并检查给定元素是否已作为键的值存在于字典中,如果不将其从列表中删除。
我的解决方案似乎有效并从列表中删除了所有项目,这些项目在字典中不作为值存在,除了一个值...95。怎么会这样?
当我进行调试时,在循环的迭代过程中,Python 似乎跳过了该值 (95):
rollNumber = [47, 64, 69, 37, 76, 83, 95, 96, 97]
sampleDict = {"Jhon": 47, "Emma": 69, "Kelly": 76, "Jason": 97}
for current_item in rollNumber:
if not current_item in sampleDict.values():
rollNumber.remove(current_item)
print(rollNumber)
实际结果:
[47, 69, 76, 95, 97]
预期结果:
[47, 69, 76, 97]
【问题讨论】:
-
不要修改您正在迭代的列表。而是迭代列表的副本
for current_item in rollNumber[:]: -
@Devesh。如果操作得当,就地修改列表绝对没有问题。
-
是的,但是正确地操作对新手来说并不是那么明显,所以最好坚持一些万无一失的事情,比如迭代副本和修改原始 IMO @MadPhysicist
-
@Devesh。啊,是的,“万无一失”的做法。正确的。开玩笑。这样真的安全多了。
-
哈哈@MadPhysicist 我不太确定你同意还是不同意
标签: python python-3.x