检查三层列表中是否包含特定列表
我有一个列表,这个列表里面包含了多个小列表,每个小列表里有一些坐标,表示不同的瓦片位置。我需要检查这个大列表里是否包含另一个坐标的小列表,就像这个例子一样:
totalList = [ [[0,1], [2,7], [6,3]], [[2,3], [6,1], [4,1]] ]
redList = [ [0,1], [2,7], [6,3] ]
if totalList contains redList:
#do stuff
你能帮我找出怎么做吗?
3 个回答
只需要使用 in
操作符就可以了:
>>> totalList = [ [[0,1], [2,7], [6,3]], [[2,3], [6,1], [4,1]] ]
>>> redList = [ [0,1], [2,7], [6,3] ]
>>> redList in totalList
True
>>> if redList in totalList:
... print('list found')
...
list found
>>>
来自 文档:
in
和not in
这两个操作符用来检查某个东西是否在另一个东西里面。比如说,x in s
的意思是如果x
是s
的一部分,就返回真(true),否则返回假(false)。而x not in s
则是x in s
的反面,也就是如果x
不在s
里面,就返回真(true)。
使用 in
这个关键词可以检查一个 list
(或者其他任何Python容器)里是否包含某个元素:
totalList = [ [[0,1], [2,7], [6,3]], [[2,3], [6,1], [4,1]] ]
redList = [ [0,1], [2,7], [6,3] ]
redList in totalList
返回结果
True
所以如果你这样做:
if redList in totalList:
#do stuff
你的代码就会 做一些事情
。
我需要知道 totalList 里是否有一个列表,它的元素和 redList 完全一样。
我们看到列表实现了 __contains__
>>> help(list.__contains__)
Help on wrapper_descriptor:
__contains__(...)
x.__contains__(y) <==> y in x
根据文档:
__contains__
用于实现成员测试操作符。如果项目在自我中,应该返回真,否则返回假。
还有:
in 和 not in 操作符用于测试集合的成员资格。 如果 x 是集合 s 的成员,x in s 就会返回真,否则返回假。x not in s 则返回 x 在 s 中的否定。集合成员测试通常与序列相关联;如果集合是一个序列,并且包含一个等于该对象的元素,那么这个对象就是集合的成员。不过,很多其他类型的对象也可以支持成员测试,而不一定是序列。特别是,字典(用于键)和集合都支持成员测试。
对于列表和元组类型,x in y 只有在存在一个索引 i,使得 x == y[i] 为真时,才为真。
所以我们知道,totalList 中的某个元素必须和 redList 的某个元素相等。
只需要使用一个包含测试:
if redList in totalList:
对于你的示例数据,这样做会返回 True
:
>>> totalList = [ [[0,1], [2,7], [6,3]], [[2,3], [6,1], [4,1]] ]
>>> redList = [ [0,1], [2,7], [6,3] ]
>>> redList in totalList
True