python 列表 A 和 B 之间出现差异的意外结果

unexpected results getting differences between python list A and B

我有两个字符串名称列表:

>>> len(list_a)
14740
>>> len(list_b)
14277

我需要获取 list_a 中不在 list_b 中的 463 个名称。 根据其他文章和答案,我尝试过:

a_set = set(list_a)
b_set = set(list_b)

diff1 = a_set - b_set
>>> len(diff1)
1457

diff2 = b_set - a_set
>>> len(diff2)
994

有趣的是 1457 - 994 = 463。所以感觉好像我很接近但遗漏或误解了什么。 我错过了什么?

Python 3

谢谢。

list_b 不一定是完全包含在 list_a 中的数据子集。考虑两个具有相似组成的小得多的列表。

list_a = [1, 2, 4, 4, 6]
list_b = [1, 3, 4]

如你所见,list_b包含了list_a中没有的3,但list_a的长度仍然更大。

简单循环

如果您试图获取 list_a 中的值而不是 list_b 中的 而不是 ,以下是 [= 中的非常直接的翻译50=]。让我们将 list_b 转换为一个集合,这样我们就可以获得元素包含的恒定时间查找。

list_a = [1, 2, 4, 4, 6]
list_b = [1, 3, 4]
set_b = set(list_b)
list_result = []
for a_ele in list_a:
    if a_ele not in set_b:
        list_result.append(a_ele)

print(list_result)
# [2, 6]

注意: 如果您不想在结果列表中出现重复值,您可以简单地遍历 set(list_a) 而不是 list_a for 循环.

设置逻辑

你想用集合逻辑来回答这个问题是对的,基本上按照你写的就可以完成。

set_a = set(list_a)
set_b = set(list_b)

list_result = list(set_a - set_b)
print(list_result)
# [2, 6]

这将创建一个列表,其中包含 list_a 中的所有元素以及 list_b 中的元素 已删除.