检查三层列表中是否包含特定列表

12 投票
3 回答
20254 浏览
提问于 2025-04-17 22:50

我有一个列表,这个列表里面包含了多个小列表,每个小列表里有一些坐标,表示不同的瓦片位置。我需要检查这个大列表里是否包含另一个坐标的小列表,就像这个例子一样:

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 个回答

2

只需要使用 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
>>>

来自 文档

innot in 这两个操作符用来检查某个东西是否在另一个东西里面。比如说,x in s 的意思是如果 xs 的一部分,就返回真(true),否则返回假(false)。而 x not in s 则是 x in s 的反面,也就是如果 x 不在 s 里面,就返回真(true)。

3

使用 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 的某个元素相等。

17

只需要使用一个包含测试:

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

撰写回答