检查它是否是 Python 中任何组的子集的有效方法

har*_*rry 0 python algorithm list set python-3.x

迭代subset_candidates并检查它是否是groupsPython中任何集合的子集的有效方法是什么?
下面的示例只有几个项目,但我希望有 10k 个 subset_candidates 和 10k 个组,所以我想知道有效的方法。
也许networkX是解决方案,但我不知道应该对这种情况应用哪种方法。

subset_candidates = [
  [2, 3], # true (subset of groups[0]) 
  [10, 12], # false
  [100, 110], # true (subset of groups[2])
  [1, 10, 100], # false
]

groups = [
  [1,2,3],
  [10,11,13],
  [100, 105, 110],
]
Run Code Online (Sandbox Code Playgroud)

Ch3*_*teR 6

你可以试试这个使用 set.issubset

s=map(set,subset_candidates)
g=list(map(set,groups))

for subset in s:
    print(any(subset.issubset(i) for i in g))
Run Code Online (Sandbox Code Playgroud)

输出

True
False
True
False
Run Code Online (Sandbox Code Playgroud)

  • 不需要将 `s` 设为列表 - `map` 对象就可以了(但是,对于 `g` 来说,列表是必要的,因为您要对其进行多次迭代) (2认同)
  • 当然不是......但是为了给出一个优化的解决方案,我们必须知道如何获得“subset_candidates”,并且我们必须知道你的数据结构是什么......如果子集是随机的,那么你必须进行“nxn”搜索。但是,如果存在某种关系,例如“subset_candidates”始终已排序并且“groups”也已排序,那么搜索会减少到“O(logn)”,那么我们可以降低复杂性。@哈利 (2认同)