2009-07-28 7 views
1

Comment puis-je utiliser python pour trouver le mot le plus long d'un ensemble de mots? je peux trouver le premier mot comme ceci:Comment trouver le mot le plus long avec python?

'a aa aaa aa'[:'a aa aaa aa'.find(' ',1,10)] 

'a' 

rfind is another subset 

'a aa aaa aa'[:'a aa aaa aa'.rfind(' ',1,10)] 

'a aa aaa' 
+2

Ceci est probablement de comprendre la question que j'ai jamais lu le plus difficile. Vous cherchez le mot le plus long dans une chaîne donnée, donc dans votre exemple ce serait 'aaa', n'est-ce pas ?! Et vous voulez l'obtenir à partir d'une seule expression en utilisant des built-ins, et sans créer de fonction ou de classe. Est-ce l'essence de votre question? – ThomasH

+2

@LarsOn: S'il vous plaît ne pas commenter sur votre propre question. Veuillez supprimer le commentaire et METTRE à jour la question avec les nouvelles informations. –

Répondre

34

Si je comprends bien votre question:

>>> s = "a aa aaa aa" 
>>> max(s.split(), key=len) 
'aaa' 

split() divise la chaîne en mots (séparés par des espaces); max() trouve le plus grand élément utilisant la fonction intégrée len(), c'est-à-dire la longueur de la chaîne, comme clé pour savoir ce que signifie "le plus grand".

+3

+1 code vraiment élégant (au moins pour un développeur Java) – dfa

+2

+1 excellente solution – ThomasH

2

Voici une de la catégorie « Comment difficile pouvez-vous faire », violant aussi l'exigence selon laquelle il devrait y avoir pas propre classe impliquée: membre

class C(object): pass 
o = C() 
o.i = 0 
ss = 'a aa aaa aa'.split() 
([setattr(o,'i',x) for x in range(len(ss)) if len(ss[x]) > len(ss[o.i])], ss[o.i])[1] 

La partie intéressante est que vous utilisez un objet à maintenir l'état pendant que la liste est calculée dans la compréhension, en rejetant éventuellement la liste et en utilisant seulement l'effet secondaire.

Mais veuillez utiliser l'une des solutions max() ci-dessus :-).

+0

Ah, encore mieux: o.i = ''; ([setattr (o, 'i', x) pour x dans s.split() si len (x)> len (o.i)], o.i) [1] – ThomasH

0

Une autre façon de trouver mot le plus long dans la chaîne:

a="a aa aaa aa" 
b=a.split() 
c=sorting(b,key=len) 
print(c[-1])  
Questions connexes