【问题标题】:find anagrams in a list of string using recursive solution in python使用python中的递归解决方案在字符串列表中查找字谜
【发布时间】:2021-05-12 22:39:04
【问题描述】:

我正在尝试解决以下问题:有一个类似下面的列表:

["hi", "ih", "ciao", "aoic", "bar", "foo", "rab", "oof"]

并且在被传递给函数之后,列表应该被简化为只出现在列表中的那些元素,不包括它们之后的所有字谜。

所以它应该输出:

["hi", "ciao", "bar", "foo"]

我正在尝试以递归方式解决这个问题,并拥有当前的解决方案,该解决方案由于变量结果(最后返回 stmt)上的“赋值前引用”错误而中断。

非常感谢任何提示!

def f(ls):
        
    def is_not_ana(first, word):
        return not sorted(first) == sorted(word) and word or None
    
    if ls:
        first = ls[0]
        rest = ls[1:]
        legal_str = [is_not_ana(first, word) for word in rest]
        result = list(filter(None, [first] + legal_str))
        
        return f(result[1:])
    else:
        return result

【问题讨论】:

    标签: python recursion variable-assignment anagram


    【解决方案1】:

    当您到达递归结束时,ls 为空,因此当您返回 result 时,它永远不会在最后一次调用中定义。

    您忘记返回first。将return f(result[1:]) 更改为return [first] + f(result[1:])

    返回一个空列表将修复您的错误:

    def f(ls):
        def is_not_ana(first, word):
            return not sorted(first) == sorted(word) and word or None
    
        if ls:
            first = ls[0]
            rest = ls[1:]
            legal_str = [is_not_ana(first, word) for word in rest]
            result = list(filter(None, [first] + legal_str))
    
            return [first] + f(result[1:])
        else:
            return []
    
    
    print(f(["hi", "ih", "ciao", "aoic", "bar", "foo", "rab", "oof"]))
    # ['hi', 'ciao', 'bar', 'foo']
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-13
      • 1970-01-01
      • 2020-05-14
      • 2016-12-13
      • 2023-04-07
      • 1970-01-01
      • 2014-05-16
      相关资源
      最近更新 更多