如何检查节点列表是否已包含在列表列表中的列表中?
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 找到的类似内容,但我陷入了精神僵局..
对这个问题有一些见解会很棒!
您可以使用 any
和 all
:
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]]
你可以用set
s来比较节点是否出现在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]]
我有以下列表: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 找到的类似内容,但我陷入了精神僵局..
对这个问题有一些见解会很棒!
您可以使用 any
和 all
:
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]]
你可以用set
s来比较节点是否出现在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]]