web-dev-qa-db-fra.com

Le moyen le plus efficace de Python pour choisir la plus longue chaîne de la liste?

J'ai une liste de longueur variable et j'essaie de trouver un moyen de vérifier si l'élément de la liste en cours d'évaluation est la plus longue chaîne contenue dans la liste. Et j'utilise Python 2.6.1

Par exemple:

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

Je suis tout nouveau sur python et je suis sûr que je ne fais que péter une cervelle. Sûrement, il y a une compréhension de liste simple, courte et élégante que je néglige?

Merci!

207
user104997

À partir de la documentation Python elle-même, vous pouvez utiliser max :

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

Que devrait-il se passer s'il y a plus d'une chaîne la plus longue (pensez '12' et '01')?

Essayez cela pour obtenir le plus long élément

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

Et puis régulièrement foreach

for st in mylist:
    if len(st)==max_length:...
5
Elazar Leibovich
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)

ou beaucoup plus facile:

max(some_list , key = len)
5

Pour obtenir le plus petit ou le plus gros élément d'une liste, utilisez les fonctions intégrées min et max:

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

qui est utilisé pour mapper les éléments de la liste avant qu'ils ne soient comparés:

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

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

Il semblerait que vous puissiez utiliser la fonction max si vous la mappez correctement pour les chaînes et utilisez-la comme comparaison. Je recommanderais simplement de trouver le maximum une fois, bien sûr, pas pour chaque élément de la liste.

3
Gavin H

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

1
HarryM
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
1