如何从符合某些标准的列表中返回对象 - Python

时间:2015-11-28 12:39:58

标签: python list python-3.x search

我正在编写一个搜索功能,我在列表中搜索匹配的单词或字符。它看起来像

    def search(seq, db):
        return match(db, seq)

匹配是一个递归函数,它搜索列表并返回一个布尔值。 如何返回包含匹配对象的列表而不是True或False?

匹配函数如下所示:

def match(seq, pattern):

    if not pattern:
        return not seq

    elif pattern[0] == '--':

        if match(seq, pattern[1:]):
            return True

        elif not seq:
            return False

        else:
            return match(seq[1:], pattern)

    elif not seq: 
        return False 

    elif pattern[0] == '&':
        return match(seq[1:], pattern[1:])

    elif seq[0] == pattern[0]:
        return match(seq[1:], pattern[1:])

    elif isinstance(seq[0], list):
        return match(seq[0], pattern)

    elif isinstance(pattern[0], list):
        return match(seq, pattern[0])

    else:
        return False

1 个答案:

答案 0 :(得分:0)

我真的不明白你的match功能在做什么。我猜你想要match函数返回列表而不是布尔值。

您可以从更改基本案例开始。你看到的任何地方return Falsereturn True代替' return [] or返回[seq [0]] (assuming seq [0]`是一个明智之举在你的比赛列表中返回。)

使用return match(...)递归情况,您可以return [seq[0]] + match(...)或类似的东西将当前匹配(如果适用)添加到递归调用返回的列表中。

这种预先列出的方法并不是特别有效,但我现在怀疑你的担忧。