【问题标题】:Why a specific value is not removed from a list? [duplicate]为什么不从列表中删除特定值? [复制]
【发布时间】: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


【解决方案1】:

试试这个

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]

【讨论】:

    猜你喜欢
    • 2022-01-25
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-14
    相关资源
    最近更新 更多