如何检查节点列表是否已包含在列表列表中的列表中?

How can I check if a list of nodes have already been included in a list within a list of lists?

我有以下列表:a = [[1,2,3],[4,5,6],[7,8,9]] 其中包含 3 个列表,每个列表都是图的节点列表。

我还得到了一个节点元组 z = ([1,2], [4,9])。现在,我要检查 z 中的列表是否已包含在 a 中的列表中。例如,[1,2][1,2,3],在a但是 [4,9]不在[4,5,6],虽然有是重叠节点。

备注:为了澄清,我也在检查列表的子列表,或者列表中的每个项目是否在另一个列表中。例如,我认为 [1,3] 是 "in" [1,2,3].

我该怎么做?我尝试实施在 Python 3 How to check if a value is already in a list in a list 找到的类似内容,但我陷入了精神僵局..

对这个问题有一些见解会很棒!

您可以使用 anyall:

a = [[1,2,3],[4,5,6],[7,8,9]]
z = ([1,2], [4,9])
results = [i for i in z if any(all(c in b for c in i) for b in a)]

输出:

[[1, 2]]

你可以用sets来比较节点是否出现在a中,<=集合的运算符等同于issubset()
itertools模块提供了一些有用的功能,itertools.product()相当于嵌套for循环。
例如:

In []:
import itertools as it
[m for m, n in it.product(z, a) if set(m) <= set(n)]

Out[]:
[[1, 2]]
a = [[1,2,3],[4,5,6],[7,8,9]]

z = ([1,2], [4,9])

for z_ in z:
    for a_ in a:
        if set(z_).issubset(a_):
            print(z_)

由于您只是想测试子列表,就好像它们是子集一样,您可以将子列表转换为集合,然后使用 set.issubset() 进行测试:

s = map(set, a)
print([l for l in z for i in s if set(l).issubset(i)])

这输出:

[[1, 2]]

itertools.product 是你的朋友(没有安装内置 python 模块):

from itertools import product
print([i for i in z if any(tuple(i) in list(product(l,[len(i)])) for l in a)])

输出:

[[1, 2]]