我需要编写一个代码,其中函数接收列表,然后从该列表中返回最长的字符串。
到目前为止,我有:
def longestword(alist):
a = 0
answer = ''
for i in alist:
x = i
if x > a:
a = x
answer = x
elif i == a:
if i not in alist:
answer = answer + ' ' + i
return answer
我的例子是longestword([11.22,"hello",20000,"Thanksgiving!",True])
应该返回'Thanksgiving!'
,但我的函数总是返回True
。
答案 0 :(得分:3)
对于初学者,这始终会将x
分配给列表中的最后一个值,在您的示例中为True
。
for i in alist:
x = i
你应该尽量不要在循环之外访问一个循环值,因为它再次是你循环的东西的最后一个值,所以True
elif i == a:
解决问题的关键是选择哪些值是字符串(using isinstance()
)并跟踪最长的值(使用len()
函数)
def longeststring(lst):
longest = ""
for x in lst:
if isinstance(x, str) and len(x) > len(longest):
longest = x
return longest
请注意等长字符串。我不知道你的任务要求。
答案 1 :(得分:1)
我希望将for循环保持在最低限度;这是我在列表中找到最长字符串的方法:
listo = ["long word 1 ", " super OMG long worrdddddddddddddddddddddd", "shortword" ]
lenList = []
for x in listo:
lenList.append(len(x))
length = max(lenList)
print("Longest string is: {} at {} characters.".format(listo[lenList.index(length)] , length))
答案 2 :(得分:0)
为什么不使用...
str_list = [x for x in alist if isinstance(x, str)]
longestword = sorted(str_list, key=len, reverse=True)[0]
使用列表推导,通过迭代原始列表的元素并仅保留带有的字符串来创建new_list
。
然后您的列表将通过sorted()
函数进行排序。
应用key=len
参数,将使用内置功能len()
根据列表元素的长度对列表进行排序。
使用reverse=True
参数,您的列表将以降序返回,即最长的列表。
然后,选择排序列表的索引[0]
,在这种情况下,该列表是最长的字符串。
然后完成:
def longestword(alist):
str_list = [x for x in alist if isinstance(x, str)]
longestword = sorted(str_list, key=len, reverse=True)[0]
return longestword
正如加文(Gavin)在下面正确指出的那样,无需返回reverse=True
参数就可以实现排序,方法是使用[-1]
返回列表中的最后一个元素,即:
longestword = sorted(str_list, key=len)[-1]
答案 3 :(得分:0)
您可以尝试这样的事情:
def longest_string(some_list):
only_str = [s for s in some_list if isinstance(s, str)]
return max(only_str, key=len)
此方法将创建一个名为only_str的字符串列表。然后它将使用max()函数返回最大长度的字符串。
当我们使用问题中提供的示例运行longest_string()方法时:
some_list = [11.22,"hello",20000,"Thanksgiving!",True]
longest_string(some_list)
输出为:“感恩节!”
希望这可以解决这个问题!