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

时间:2018-08-27 03:37:00

标签: python python-3.x list tuples element

我有以下列表: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]在[1,2,3]之内。

我该怎么做?我尝试实现类似Python 3 How to check if a value is already in a list in a list的方法,但陷入了僵局。

对这个问题的一些见解将是很棒的!

5 个答案:

答案 0 :(得分:3)

您可以使用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]]

答案 1 :(得分:2)

您可以使用DataItemTemplate来比较节点是否出现在ClientIDMode="Static"中,集合的set运算符等于a
<=模块提供了一些有用的功能,issubset()等效于嵌套的itertools循环。
例如:

itertools.product()

答案 2 :(得分:1)

.zip

答案 3 :(得分:1)

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

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

这将输出:

[[1, 2]]

答案 4 :(得分:1)

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]]