在列表中选择最长字符串的最有效的方法?

我有一个可变长度的列表,我试图找到一种方法来测试当前正在评估的列表项是否是列表中包含的最长字符串。我使用的是Python 2.6.1

例如:

mylist = ['abc','abcdef','abcd']


for each in mylist:
if condition1:
do_something()
elif ___________________: #else if each is the longest string contained in mylist:
do_something_else()

肯定有一个简单的列表理解,简短而优雅,我忽略了?

246575 次浏览

Python文档本身,你可以使用max:

>>> mylist = ['123','123456','1234']
>>> print max(mylist, key=len)
123456

len(each) == max(len(x) for x in myList)each == max(myList, key=len)

要获得列表中最小或最大的项,使用内置的min和max函数:

 lo = min(L)
hi = max(L)

和sort一样,你可以传入一个“键”;参数,用于在比较列表项之前映射它们:

 lo = min(L, key=int)
hi = max(L, key=int)

http://effbot.org/zone/python-list.htm

看起来你可以使用max函数,如果你正确地映射字符串,并使用它作为比较。我建议只找到最大值一次,当然,不是针对列表中的每个元素。

如果有多个最长的字符串(比如'12'和'01'),会发生什么?

试着得到最长的元素

max_length,longest_element = max([(len(x),x) for x in ('a','b','aa')])

然后是常规foreach

for st in mylist:
if len(st)==max_length:...
def LongestEntry(lstName):
totalEntries = len(lstName)
currentEntry = 0
longestLength = 0
while currentEntry < totalEntries:
thisEntry = len(str(lstName[currentEntry]))
if int(thisEntry) > int(longestLength):
longestLength = thisEntry
longestEntry = currentEntry
currentEntry += 1
return longestLength
def longestWord(some_list):
count = 0    #You set the count to 0
for i in some_list: # Go through the whole list
if len(i) > count: #Checking for the longest word(string)
count = len(i)
word = i
return ("the longest string is " + word)

或者更简单:

max(some_list , key = len)