在Python中有效匹配子列表

时间:2011-11-09 22:44:16

标签: python list matching sublist

给定一个二维列表,我想找到包含子列表的所有内容。我意识到我可以做类似的事情:

#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的长度是未知的并且可能非常大。非常感谢任何帮助,并提前感谢。

1 个答案:

答案 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)]