在列表中查找最长的字符串

时间:2016-12-02 03:06:18

标签: python list

我需要编写一个代码,其中函数接收列表,然后从该列表中返回最长的字符串。

到目前为止,我有:

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

4 个答案:

答案 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)

输出为:“感恩节!”

希望这可以解决这个问题!