【发布时间】:2022-01-06 09:53:38
【问题描述】:
假设A = [[0, 1], [1, 2]] 存储来自{0, 1, 2, 3} 的两个2 组合,而B = [[0, 1, 2], [0, 1, 3], [0, 2, 3], [1, 2, 3]] 存储来自{0, 1, 2, 3} 的所有可能的3 组合。
如何找到B 中至少包含A 中的2 个组合之一的所有元素?
我想要的输出是C = [[0, 1, 2], [0, 1, 3], [1, 2, 3]],其中[0, 1, 2] 包括[0, 1] 和[1, 2],[0, 1, 3] 包括[0, 1],[1, 2, 3] 包括[1, 2]。
谢谢! (如果答案代码高效快捷,那就太好了,因为我需要为大规模的A和B这样做)
我尝试了以下代码:
import numpy as np
import itertools
A = [[0, 1], [1, 2]]
B = []
Cdup = []
rows = range(4)
for combo in itertools.combinations(rows, 3):
B.append(list(combo))
print(B)
for b in B:
for a in A:
if a.issubset(b):
Cdup.append(b)
C = np.unique(Cdup)
但是有一个错误说list object has no attribute issubset。
【问题讨论】:
-
到目前为止你自己有什么代码?
-
是否保证每个内部列表都包含唯一值?也就是说,像
[0, 1, 1]这样的重复项是不可能的? -
@976993 对。没有重复。
-
@9769953 我只包含代码
-
“一个错误,说列表对象没有属性 'issubset'”:如果将内部列表转换为集合,这将起作用(名称“issubset”是一个赠品)。因此我关于重复的问题是:如果没有重复,那么比较集合比比较列表更容易(并且可能更快)。