46 votes

Comment trouver la chaîne la plus courte dans une liste en Python

Cela semble être un problème assez simple, mais je cherche une façon courte et douce de le faire qui soit toujours compréhensible (ce n'est pas du golf de code).

Étant donné une liste de chaînes, quel est le moyen le plus simple de trouver la chaîne la plus courte ?

Le chemin qui me semble le plus évident est en gros :

 l = [...some strings...]
lens = map(l, len)
minlen, minind = min(lens)
shortest = l[minind]

mais cela semble être beaucoup de code pour ce problème (au moins en python).

131voto

Jeremy Banks Points 32470

La fonction min a un paramètre facultatif key qui vous permet de spécifier une fonction pour déterminer la "valeur de tri" de chaque élément. Nous avons juste besoin de définir ceci sur la fonction len pour obtenir la valeur la plus courte :

 strings = ["some", "example", "words", "that", "i", "am", "fond", "of"]

print min(strings, key=len) # prints "i"

2voto

phaedrus Points 8060

Prend un temps linéaire :

    reduce(lambda x, y: x if len(x) < len(y) else y, l)

1voto

carlpett Points 4883

J'utiliserais sorted(l, key=len)[0]

0voto

leecbaker Points 971

Réponse potentielle :

 l = [...some strings...]
l.sort(key=len)
shortest = l[0]

Cependant, cela est probablement très inefficace dans la mesure où cela trie toute la liste, ce qui est inutile. Nous n'avons vraiment besoin que du minimum.

0voto

Pedro Lopes Points 436

Comme suggéré dans d'autres réponses, ces solutions prennent un temps linéaire. Ils doivent cependant être protégés contre les itérables vides :

 import functools

strings = ["small str", "xs", "long string"]

if (strings):
    print( "shortest string:", functools.reduce(lambda x, y: x if len(x) < len(y) else y, strings) )
    # or if you use min:
    # print( "shortest string:", min(strings, key=len) )
else:
    print( "list of strings is empty" )

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X