Reputation: 3255
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 = ['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()
Surely there's a simple list comprehension that's short and elegant that I'm overlooking?
Upvotes: 322
Views: 281311
Reputation: 194
This is a linear time implementation I came up with. If there exists multiple elements of the same size, then will return the first element with the largest size. :
s = ["a", "b", "c", "d", "aa", "bb", "cc", "dd", "ddd", "dd d"]
maxl = ""
for i in s:
if len(i) > len(maxl):
maxl = i
print(maxl)
If you want the index of the string with max length you can use the following:
s = ["a", "b", "c", "d", "aa", "bb", "cc", "dd", "ddd", "dd d"]
shuffle(s) #from random import shuffle
print(s)
maxl_idx = 0
for i,j in enumerate(s):
if len(j) > len(s[maxl_idx]):
maxl_idx = i
print(maxl_idx, '\t', s[maxl_idx])
Upvotes: 1
Reputation: 10482
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, you can pass in a "key" argument 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.
Upvotes: 4
Reputation: 169
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)
Upvotes: 16
Reputation: 17
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
Upvotes: 0
Reputation: 33593
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:...
Upvotes: 9
Reputation: 1885
len(each) == max(len(x) for x in myList)
or just each == max(myList, key=len)
Upvotes: 3
Reputation: 488384
From the Python documentation itself, you can use max
:
>>> mylist = ['123','123456','1234']
>>> print max(mylist, key=len)
123456
Upvotes: 777