在 python 的多维列表中搜索

search in a multidimensional list in python

我有一个元组列表,即F = [(1,2,1), (2,3,0), (1,2,4)]

如果我想检查 F 中是否存在 (1,2,1) 我使用 F.__contains__((1,2,1)).

但是如何检查列表中是否存在 (1,2,just any number)(1,just any number,just any number)

我使用了 F.__contains__((1,2,True)) 但没有正常工作。

>>> T = (1, 2)
>>> F = [(1,2,1), (2,3,0), (1,2,4)]
>>> any(filter(lambda x:x[:2]==T, F))
True
(1, 2) in [x[:-1] for x in F]

注意已经注释了不要直接使用contains

不要直接使用这里其他人提到的特殊方法__contains__。使用执行相同任务的成员运算符 in

代码

F = [(1,2,1), (2,3,0), (1,2,4)]

print((1, 2) in [element[:2] for element in F])  # True

在评论中,Mohammad 要求使用更通用的搜索方法。这是一种方法。

from itertools import zip_longest

F = [(1,2,1), (2,3,0), (1,2,4)]

def search_2d_list(needle, haystack):
    def equal_or_none(row):
        return all(q is None or q == i for q, i in zip_longest(needle, row))
    return any(equal_or_none(row) for row in haystack)

来自终端的结果

>>> search_2d_list((1,), F)
True
>>> search_2d_list((1,2), F)
True
>>> search_2d_list((1,2,1), F)
True
>>> search_2d_list((1,2,3), F)
False
>>> search_2d_list((2,2,3), F)
False
>>> search_2d_list((2,2), F)
False
>>> search_2d_list((2,None,2), F)
False
>>> search_2d_list((2,None,0), F)
True