向量中缺少几个元素
Missing couple of elements in a vector
我在 numpy
中有一个数字向量。例如:
a = [0,1,2,3]
我有一个向量列表:
b = [[0,1] , [0,2], [0,3], [1,2], [1,3]]
Python 中允许我找到 b 中缺少的几个元素的最佳解决方案是什么?在这种情况下,它将是:
c = [2,3]
我要补充一点,元素的顺序并不重要,我只需要缺少的一对。
第一次尝试
我尝试使用 sets
的功能,通过 symmetric_difference
它在 b 的元素中给出了 a 的缺失元素:
for j in range(len(b)):
list(set(b[j]).symmetric_difference(a)
但我没有设法找出算法的结尾或替代方法。
您可以先使用 itertools.combinations
创建所有组合,然后在 set
中使用 difference
,如下所示:(这适用于多元素)
>>> import itertools
>>> a = [0,1,2,3]
>>> b = [[0,1] , [0,2], [0,3], [1,3]]
>>> c = itertools.combinations(a,2)
>>> res = set(c).difference(map(tuple, b))
>>> list(map(list, res))
[[2, 3], [1, 2]]
# for more explanation
>>> set(itertools.combinations(a,2))
{(0, 1), (0, 2), (0, 3), (1, 2), (1, 3), (2, 3)}
我在 numpy
中有一个数字向量。例如:
a = [0,1,2,3]
我有一个向量列表:
b = [[0,1] , [0,2], [0,3], [1,2], [1,3]]
Python 中允许我找到 b 中缺少的几个元素的最佳解决方案是什么?在这种情况下,它将是:
c = [2,3]
我要补充一点,元素的顺序并不重要,我只需要缺少的一对。
第一次尝试
我尝试使用 sets
的功能,通过 symmetric_difference
它在 b 的元素中给出了 a 的缺失元素:
for j in range(len(b)):
list(set(b[j]).symmetric_difference(a)
但我没有设法找出算法的结尾或替代方法。
您可以先使用 itertools.combinations
创建所有组合,然后在 set
中使用 difference
,如下所示:(这适用于多元素)
>>> import itertools
>>> a = [0,1,2,3]
>>> b = [[0,1] , [0,2], [0,3], [1,3]]
>>> c = itertools.combinations(a,2)
>>> res = set(c).difference(map(tuple, b))
>>> list(map(list, res))
[[2, 3], [1, 2]]
# for more explanation
>>> set(itertools.combinations(a,2))
{(0, 1), (0, 2), (0, 3), (1, 2), (1, 3), (2, 3)}