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


254

J'ai une liste de longueur variable et j'essaie de trouver un moyen de tester si l'élément de 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 = ['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()

Il y a sûrement une compréhension de liste simple, courte et élégante que je néglige?

Réponses:


620

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

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

1
Ne fonctionnera pas pour Python 2.4. Voir cet article et cet article pour le code à implémenter sous 2.4.
Kumba

13
Il ne renvoie que la première chaîne la plus longue: par exemple, print(max(["this", "does", "work"], key=len))renvoie uniquement "this"au lieu de renvoyer toutes les chaînes les plus longues.
Anderson Green

idem @AndersonGreen. La méthode peut-elle être redéployée d'une manière qui capture également les deux éléments + de la liste répondant à l'appel (clé)?
David Shaked du

Pour faire suite à ma question posée plus tôt, j'ai lié une réponse qui résout le problème du premier élément si tout est égal ...
David Shaked

4
Pour obtenir chaque élément le plus grand, en temps linéaire, vous devez le faire m=max(map(len,xs)); [x for x in xs if len(x) == m]. Je ne pense pas que cela puisse être bien fait en une seule ligne.
Thomas Ahle

6

Que doit-il se passer s'il y a plus d'une chaîne plus longue (pensez à «12» et «01»)?

Essayez cela pour obtenir l'élément le plus long

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

Et puis foreach régulière

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)

ou bien plus simple:

max(some_list , key = len)

4

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

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

Comme pour le tri, vous pouvez passer un argument "clé" qui est utilisé pour mapper les éléments de la liste avant de les comparer:

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

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

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


2

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


4
pouvez-vous fournir une brève explication?
David Shaked du

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.