给定一个二维列表,我想找到包含子列表的所有内容。我意识到我可以做类似的事情:
#Psuedo-Python (not kosher)
def MatchAll(theList,toMatch):
result=list(theList)
for nMatch in toMatch:
for nResult in result:
if not nMatch in nResult:
result.remove(nResult)
return result
但这似乎有各种不好。它似乎与我迄今为止看到和处理过的Python代码非常不同,除了我在迭代它时对列表进行更改,我读过它并不是一件好事。此外,它似乎非常低效:虽然toMatch的长度不应超过我的目的,但是List的长度是未知的并且可能非常大。非常感谢任何帮助,并提前感谢。
答案 0 :(得分:3)
我要做的只是保留与“匹配”列表中所有项目匹配的子列表。
def match_all(the_list, to_match):
return [sublist for sublist in the_list
if all(item in sublist for item in to_match)]
您可以使用set
:
def match_all(the_list, to_match):
matches = set(to_match).issubset
return [sublist for sublist in the_list if matches(sublist)]