关于python:查找列表中最长的字符串

Find longest string in a list

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

到目前为止,我有:

1
2
3
4
5
6
7
8
9
10
11
12
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


对于初学者,它总是将x分配给列表中的最后一个值,在您的示例中,该值就是True

1
2
for i in alist:        
    x = i

你应该尽量不要访问循环之外的循环值,因为它也是你循环的最后一个值,所以True

1
elif i == a:

解决这个问题的关键是找出哪些值是字符串(使用isinstance()并跟踪最长的值(使用len()函数)

1
2
3
4
5
6
def longeststring(lst):
  longest =""
  for x in lst:
    if isinstance(x, str) and len(x) > len(longest):
      longest = x
  return longest

一定要注意等长的字符串。我不知道你的任务要求。


我喜欢将for循环保持在最小值;下面是我如何在列表中查找最长的字符串:

1
2
3
4
5
6
7
8
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))