记录一个问题:Python中,列表的每一项内容为np.array类型时,如何获得两列表的交集?
可以想到最基本的想法是双重嵌套循环。写出以下代码
list_common=[]
for item0 in list_a:
for item1 in list_b:
if(np.array_equal(item0,item1)):
list_common.append(item0)
这样的嵌套循环,想法是先从list_a中取出一项item0来,在list_b中遍历比较,如果有相同的项,就把它放入交集list_common中。如果list_b中第一项就与item0相同,后续的遍历就是无意义的消耗时间,所以可以在找到相同项时跳出循环,在list_a中下移一个位置,再取出一个item0,继续比较。
list_common=[]
for item0 in list_a:
for item1 in list_b:
if(np.array_equal(item0,item1)):
list_common.append(item0)
break
在实际应用中,list_a和list_b中都可能存在重复项。这样的话,如果修改list_a和list_b的位置,得到的交集list_common的长度是不一样的。如果想得到一个不含重复项的交集 ,还需要去掉重复项。
list_common=[]
list_repeat=[]
for item0 in list_a:
for item1 in list_b:
if(np.array_equal(item0,item1)):
list_repeat.append(item0)
break
#将np.array转换为列表并去重
unique_lists=list({tuple(l) for l in list_repeat})
#将去重后的元组列表转换回np.array列表
list_common=[np.array(l) for l in unique_lists]