【问题标题】:Missing couple of elements in a vector向量中缺少几个元素
【发布时间】:2021-12-05 15:17:07
【问题描述】:

我在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)

但我无法弄清楚算法的结束或替代方法。

【问题讨论】:

  • 是少了一个,还是少了几个?
  • 如果您还缺少[1, 2],输出应该是什么? [[1, 2], [2, 3]] ?或[1, 2, 3]?
  • 可能缺少几个,输出应该是一对夫妇的列表(例如:[[1,2],[2,3]])

标签: python list algorithm set combinations


【解决方案1】:

您可以先使用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)}

【讨论】:

  • 其实set.difference可以任意迭代,所以set(c).difference(map(tuple, b))就够了。
猜你喜欢
  • 1970-01-01
  • 2014-11-24
  • 1970-01-01
  • 2022-12-18
  • 2020-11-15
  • 2011-03-26
  • 1970-01-01
  • 2012-04-24
  • 2013-11-01
相关资源
最近更新 更多