我有以下列表: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的方法,但陷入了僵局。
对这个问题的一些见解将是很棒的!
答案 0 :(得分:3)
您可以使用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]]
答案 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]]