Python如何查找列表中缺失的numpy向量二元组合
实现方案
核心思路
因为你要求不考虑二元组内元素顺序,所以核心是把所有可能的二元组合和已有的二元组合都转成统一的无顺序可哈希格式,再通过集合求差得到缺失的组合。
具体实现步骤
- 用
itertools.combinations生成数组a中所有不重复的无顺序二元组合 - 将所有生成的组合、以及b中已有的二元组统一转成排序后的元组(解决顺序不敏感的问题,同时元组可哈希可以存入集合)
- 两个集合求差,得到的就是b中缺失的二元组合
代码示例
import itertools import numpy as np # 示例输入 a = np.array([0, 1, 2, 3]) b = [[0, 1], [0, 2], [0, 3], [1, 2], [1, 3]] # 生成a的所有合法二元组合,转排序后元组存入集合 all_combs = set(tuple(sorted(comb)) for comb in itertools.combinations(a, 2)) # 处理b中已有二元组 exist_combs = set(tuple(sorted(pair)) for pair in b) # 求差集得到缺失组合 missing = list(all_combs - exist_combs) # 本例只有一个缺失组合,直接转列表输出,多个的话遍历即可 c = list(missing[0]) print(c) # 输出 [2, 3]
无额外依赖替代方案
如果不想引入itertools库,也可以手动两层循环生成所有二元组合,逻辑完全一致:
import numpy as np a = np.array([0, 1, 2, 3]) b = [[0, 1], [0, 2], [0, 3], [1, 2], [1, 3]] all_combs = set() for i in range(len(a)): for j in range(i+1, len(a)): all_combs.add((a[i], a[j])) exist_combs = set(tuple(sorted(pair)) for pair in b) missing = list(all_combs - exist_combs) c = list(missing[0]) print(c)
内容的提问来源于stack exchange,提问作者albiremo
相关产品推荐
相关产品推荐

