我是新来的,对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,因为跳跃的长度我不确定它是否通过每个列表并检查每个字符串的长度。总之,我不认为它正在替换/更新最长的字符串。因此,如果有人能告诉我我做错了什么或如何修复我的例子,我将非常感激。非常感谢你提前。
答案 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]。