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


254

我有一个可变长度的列表,正在尝试寻找一种方法来测试当前正在评估的列表项是否是列表中包含的最长字符串。我正在使用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()

当然,有一个简单的列表理解功能很简短,但我却忽略了它?

Answers:


619

Python文档本身,您可以使用max

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

1
不适用于Python 2.4。有关在2.4下要实现的代码,请参见此职位该职位
库姆巴(Kumba)2012年

13
它仅返回第一个最长的字符串:例如,print(max(["this", "does", "work"], key=len))仅返回"this"而不是返回所有最长的字符串。
安德森·格林

同上@AndersonGreen。是否可以重新部署该方法,使其捕获同样满足调用(键)的列表的两个以上元素?
David Shaked

在较早前回答我的问题后,我已链接了一个答复,该答复纠正了所有其他相等问题……
David Shaked,2016年

4
要获得线性时间中的每个最大元素,您必须做m=max(map(len,xs)); [x for x in xs if len(x) == m]。我认为这不可能一口气完成。
Thomas Ahle

6

如果最长的字符串超过1个(应该考虑'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:...

5
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)

4

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

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

与sort一样,您可以传入“ key”参数,该参数用于在比较列表项之前映射它们:

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

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

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


2

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


4
您能提供一个简短的解释吗?
David Shaked

1
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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.