在 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
我有一个元组列表,即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