我需要比较两个列表,以便创建在一个列表中找到但在另一个列表中没有的特定元素的新列表。例如:
main_list=[]
list_1=["a", "b", "c", "d", "e"]
list_2=["a", "f", "c", "m"]
我想遍历 list_1 并将 list_2 中未在 list_1 中找到的所有元素附加到 main_list。
结果应该是:
main_list=["f", "m"]
我怎样才能用python做到这一点?
原文由 CosimoCD 发布,翻译遵循 CC BY-SA 4.0 许可协议
TL;博士:
解决方案 (1)
解决方案(2) 你想要一个排序列表
说明:
(1) You can use NumPy’s
setdiff1d
(array1
,array2
,assume_unique
=False
).assume_unique
询问用户数组是否已经唯一。如果
False
,则首先确定唯一元素。如果
True
,该函数将假定元素已经是唯一的并且函数将跳过确定唯一元素。这会产生
array1
中不 存在的唯一值array2
。assume_unique
默认为False
。如果您关心 独特的 元素(基于 Chinny84 的响应),那么只需使用(其中
assume_unique=False
=> 默认值):(2) 对于那些想要对答案进行排序的人,我制作了一个自定义函数:
要获得答案,请运行:
旁注:
(a) 解决方案 2(自定义函数
setdiff_sorted
)返回一个 列表(与解决方案 1 中的 数组 相比)。(b) 如果您不确定元素是否唯一,只需在解决方案 A 和 B 中使用 NumPy 的默认设置
setdiff1d
。什么是复杂的例子?见注©。© 如果两个列表中的任何一个 不是 唯一的,情况就会有所不同。
说
list_2
不是唯一的:list2 = ["a", "f", "c", "m", "m"]
。保持list1
原样:list_1 = ["a", "b", "c", "d", "e"]
设置
assume_unique
的默认值会产生["f", "m"]
(在两种解决方案中)。但是,如果您设置assume_unique=True
,两种解决方案都会给出["f", "m", "m"]
。为什么?这是因为用户假设元素是唯一的)。因此,最好将assume_unique
保持为默认值。请注意,两个答案都已排序。蟒蛇 _