Python's most efficient way to choose longest

2019-01-02 14:31发布

I have a list of variable length and am trying to find a way to test if the list item currently being evaluated is the longest string contained in the list. And I am using Python 2.6.1

For example:

mylist = ['123','123456','1234']

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

I'm brand new to python and I'm sure I'm just having a brain fart. Surely there's a simple list comprehension that's short and elegant that I'm overlooking?

Thanks!

6条回答
泛滥B
2楼-- · 2019-01-02 14:51
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
查看更多
皆成旧梦
3楼-- · 2019-01-02 14:57

What should happen if there are more than 1 longest string (think '12', and '01')?

Try that to get the longest element

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

And then regular foreach

for st in mylist:
    if len(st)==max_length:...
查看更多
一个人的天荒地老
4楼-- · 2019-01-02 15:08

To get the smallest or largest item in a list, use the built-in min and max functions:

lo = min(L)
hi = max(L) As with sort (see below), you can pass in a key function

that is used to map the list items before they are compared:

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

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

Looks like you could use the max function if you map it correctly for strings and use that as the comparison. I would recommend just finding the max once though of course, not for each element in the list.

查看更多
残风、尘缘若梦
5楼-- · 2019-01-02 15:12
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)

or much easier:

max(some_list , key = len)
查看更多
浅入江南
6楼-- · 2019-01-02 15:15

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

查看更多
呛了眼睛熬了心
7楼-- · 2019-01-02 15:18

From the Python documentation itself, you can use max:

>>> mylist = ['123','123456','1234']
>>> print max(mylist, key=len)
123456
查看更多
登录 后发表回答