【问题标题】:How to return objects from a list that matches certain criterias - Python如何从匹配某些条件的列表中返回对象 - Python
【发布时间】:2016-03-02 11:35:53
【问题描述】:

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

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

其中 match 是一个递归函数,它在列表中搜索并返回一个布尔值。 如何返回包含匹配对象的列表,而不仅仅是 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

【问题讨论】:

  • def match(db, seq): return [bool(i) for i in db if i in seq]
  • def 匹配是什么意思? match 已经是一个完整的函数,我们只用它来搜索列表。我们需要 search 函数调用 match 函数,然后挑选出匹配的元素。
  • 我的意思是匹配函数和我的一样,因为你在调用它?
  • 我编辑了帖子并添加了匹配功能,这是我已经完成的功能,所以应该是这样的。

标签: python list python-3.x search


【解决方案1】:

我不太明白你的 match 函数在做什么。我猜你希望match 函数返回一个列表而不是布尔值。

您可以从更改基本情况开始。在您看到return Falsereturn True 的任何地方都说'return []orreturn [seq[0]](assumingseq[0]` 是在您的匹配列表中返回的明智之举)。

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

这种添加列表的方法并不是特别有效,但我怀疑你现在的担心。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-17
    • 2017-06-17
    • 2020-06-14
    • 2022-01-05
    • 2020-06-26
    • 1970-01-01
    • 1970-01-01
    • 2016-11-09
    相关资源
    最近更新 更多