【问题标题】:Python - Contrast 2 Lists [duplicate]Python - 对比 2 个列表 [重复]
【发布时间】:2019-01-26 02:23:18
【问题描述】:

我尝试了几种方法,但似乎都没有奏效。我需要在 Python 中对比(不比较)两个列表,以便返回两个列表之间的差异。我需要知道 list1 中的哪些元素在 list2 中不存在。我试过这个:

zombies = list(set(list1) - set(list2))

但我得到的是相同的,而不是不同的。

【问题讨论】:

  • I need to know which elements in list1 do not exist in list2 你的代码就是这样做的。
  • 你的输出是什么?list1list2的值是多少?
  • [i for i in list1 if i not in list2]

标签: python


【解决方案1】:

试试这个:

list1 = [1,2,3,4,5]
list2 = [3,4,5]
zombies = list(set(list1).difference(set(list2)))

输出将是:

[1, 2]

【讨论】:

  • set(list1) - set(list2)set(list1).difference(set(list2)) 是一回事。 - 运算符只是语法糖
【解决方案2】:

如果您的列表很长并且速度成为一个重要因素,请使用 freezeset freezesets 是不可变的,因此请务必注意,它们不能更改,但如果您只需要差异,它们的速度会更快:

a = [1, 2, 3, 4, 5]
b = [9, 8, 7, 6, 5]
frozenset(a).difference(b)

返回:

frozenset({1, 2, 3, 4})

我知道在您的问题中,您需要知道列表 1 中的哪些项目不会出现在列表 2 中,但请注意,此方法就是这样做的。如果您想知道列表 2 中的哪些项目没有出现在列表 1 中,只需切换列表即可:

frozenset(b).difference(a)

返回:

frozenset({6, 7, 8, 9})

如果您不需要下游操作,则方法略有不同,但速度几乎是上面列出的方法的两倍。

验证我所说的:

%timeit set(a).difference(set(b))

1000000 loops, best of 3: 844 ns per loop

%timeit frozenset(b).difference(a)

1000000 loops, best of 3: 588 ns per loop

希望这能消除差异。

【讨论】:

  • ooo 确实不错。似乎我的代码很好,至少是比较部分。我弄乱了要比较的列表之一。不过会接受,因为它提供了一种很好的功能性方式来快速完成。
  • 什么?你能证明frozenset 差分比set 差分更快吗?
  • 前段时间有人帮我做的:见这里stackoverflow.com/questions/1388818/…
  • 呃哦............
  • 您是否因为我说它更快而对我投了反对票?严重吗?
猜你喜欢
  • 1970-01-01
  • 2019-09-14
  • 1970-01-01
  • 2019-04-04
  • 1970-01-01
  • 2011-05-26
  • 2013-01-21
  • 2011-04-26
  • 2022-06-26
相关资源
最近更新 更多