【问题标题】:Removing deuplicates between two lists [duplicate]删除两个列表之间的重复项[重复]
【发布时间】:2017-01-13 19:19:56
【问题描述】:

我从硬盘加载了一个列表,然后从互联网上调出另一个列表,两者都是城镇名称。我想将这两个列表组合在一起并删除所有重复的名称,以便它们仅在硬盘驱动器的列表中出现一次。我看到了一种简单的方法,如果不将它们进行比较,并且在类似的情况下它可以工作,但现在它没有删除重复项,而是给了我列表一和列表二,当它被写回时未经编辑到硬盘驱动器。

我最初使用的概念是

for x in townname:
    if x not in towns:
        towns.append(x)
        print(x)

这只是将 list2 复制到列表 1 并删除任何内容。当我切换城镇名称和周​​围的城镇时,情况正好相反。

如何在将其余部分从 townname 复制到 towns 时删除重复项?

【问题讨论】:

  • 如果您从 Internet 获取此列表,它可能位于 bytes 中,因此成员资格检查可能会失败。无论哪种方式,都值得使用print 来查看是否存在这种差异。
  • 我确实将原始列表转换为 str,以便我可以分析 html 代码并从 html 代码中提取列表。
  • Jim 所说的并将两者转换为集合。使此类操作变得非常简单。

标签: python list python-3.x


【解决方案1】:

在独特元素很重要的情况下,您可以使用内置的 set() 容器类型。集合不允许重复元素,因此对于从另一个容器类型中删除重复元素很有用。

在您的情况下,您可以简单地组合两个列表,将组合列表转换为 set(),然后将集合转换回列表。这是一个使用两个列表的最小示例:

>>> l = [1, 2, 3, 4, 5]
>>> l2 = [4, 5, 6, 7, 8]
>>> list(set(l + l2))
[1, 2, 3, 4, 5, 6, 7, 8]
>>> 

【讨论】: