如何使用递归来查找多个列表中最长的字符串? (蟒蛇)

时间:2015-12-06 23:42:26

标签: python recursion

我是新来的,对python来说相当新,我有一个问题。我在一段时间的中期期间遇到了一个类似的问题,它让我感到烦恼,我似乎无法弄明白。

总体思路是我必须在嵌套列表中找到最长的字符串。所以我想出了我自己的例子来试图找出来,但由于某种原因我不能。所以我希望有人可以告诉我我做错了什么以及如何在不使用max函数的情况下解决问题,而是使用for循环。这是我自己的代码示例:

typing_test = ['The', ['quick', 'brown'], ['fox', ['jumped'], 'over'], 'the', 'lazy', 'dog']

def longest_string (nested_list: 'nested list of strings') -> int:
'''return the longest string within the nested list'''

    maximum_length = 0
    for word in nested_list:
        try:
            if type(word) == str:
                maximum_length >= len(word)
                maximum_length = len(word)
            else:
                (longest_string((word)))
        except:
            print('Error')

    return maximum_length 

我的代码返回3但最高应该是6,因为跳跃的长度我不确定它是否通过每个列表并检查每个字符串的长度。总之,我不认为它正在替换/更新最长的字符串。因此,如果有人能告诉我我做错了什么或如何修复我的例子,我将非常感激。非常感谢你提前。

3 个答案:

答案 0 :(得分:0)

您的代码中存在一些问题:

  • 您需要存储递归调用的值(maximum_length = (longest_string((word)))
  • 如果单词的长度较大(不小于代码中),则需要替换当前的最大值。如果在这部分代码中也没有。

这是您的功能的修改代码(只需稍加修改即可使用):

def longest_string (nested_list):

    maximum_length = 0
    for word in nested_list:
        try:
            if type(word) == str:
                if maximum_length < len(word):
                    maximum_length = len(word)
            else:
                maximum_length = longest_string((word))
        except:
            print('Error')

    return maximum_length

答案 1 :(得分:0)

您将使用递归来计算嵌套列表中最长的字符串。

递归应该能够具有结束条件。对于你的问题,我想把“如果参数是str”。

然后,假设参数将始终为str或list,并且我们不考虑其他边界条件,代码将如下:

def longest_string(p):
    if type(p) == str:
        return len(p)  # Return the length of the str.

    return max([longest_string(x) for x in p])

答案 2 :(得分:0)

您可以使用列表理解:

def longest(lst):
    return max([0]+[i for i in lst if isinstance(i,int)]+
               [len(s) for s in lst if isinstance(s,str)]+
               [longest(L) for L in lst if isinstance(L,list)])

包含在顶层的空列表需要[0]。