【问题标题】:For-loop through 2 lists in Python to remove matches循环遍历 Python 中的 2 个列表以删除匹配项
【发布时间】:2016-10-11 10:05:24
【问题描述】:

我有两个列表,我想在 Python 中循环查找匹配项并删除它们。 第一个叫SavedWordData,长度为2156,第二个叫listReturned,长度为1000。

然后我尝试这样做:

maxLenReturned = len(listReturned)
maxLenSaved = len(savedWordData)

    for i in range(maxLenSaved):
    for x in range(maxLenReturned):
        if savedWordData[i] == listReturned[x]:
            savedWordData.pop(i)

但是当我这样做时,我收到一条错误消息,上面写着: IndexError:列表索引超出范围 这表明我超出了某些列表的范围,但我不明白为什么以及哪些列表超出了它的范围?

【问题讨论】:

  • 如果你在一个列表上调用 pop(),它会减小它的大小。因此它引发了异常。
  • @GurupadMamadapur 嗯,好吧。我怎样才能在不做流行音乐的情况下实现我想做的同样的事情?我应该创建一个新的临时列表来存储所有不匹配的数据吗?

标签: python-3.x for-loop iteration


【解决方案1】:

当您在列表上调用 pop() 时,它会减小它的大小,因此假设您有一个大小为 100 的列表并且您已经弹出了 50 个元素。当您尝试获取第 51 个元素时,它会引发 Index out of range 错误,因为现在大小减少到 50。

您应该了解列表推导。他们真的很棒,你可以在一行中完成。

savedWordData = [x for x in savedWordData if x not in listReturned]

就是这样。 listReturned 中的所有项目都不存在于savedWordData 中。

【讨论】:

  • 非常感谢您提供这个有用的答案。还将阅读列表推导,因为了解它似乎真的很棒。
猜你喜欢
  • 2014-06-26
  • 1970-01-01
  • 2017-05-20
  • 2017-03-24
  • 1970-01-01
  • 2015-03-06
  • 2023-02-24
  • 2018-10-26
  • 2019-04-15
相关资源
最近更新 更多