每一项元素为np.array的两列表list取交集

记录一个问题: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]
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值