1
votes

Comment trouver une phrase avec le plus de mots dans une liste en python?

A =["I like apple"]
B =["I like playing basketball"]
C =["how are you doing"]
listt=[A,B,C]
I need to return the string with the most words in a list (in this example it's B and C). first, I want to count number of words in each string, but my code doesn't work. Does anyone know how to return the string that has the most words? number = len(re.findall(r'\w+',listt))

1 commentaires

Voulez-vous dire que vous souhaitez renvoyer tous les éléments de la liste à l'exception de celui qui contient le moins de mots?


6 Réponses :


1
votes

Utilisez max:

print([i for i in A+B+C if i == max(A+B+C,key=lambda x: len(x.split()))])

Si vous voulez afficher les deux:

print(max(A+B+C,key=lambda x: len(x.split())))


5 commentaires

Cela ne dépend-il pas de la longueur de la chaîne, pas du nombre de mots?


@ user24343 J'ai terminé ma modification.


L'OP voulait afficher B et C comme sortie, cela ne montre que B. Vérifiez ma réponse.


@AbhinayPandey Regardez le deuxième exemple!


Vous ne pouvez pas utiliser split () ici comme tous les points ou virgules dans trois. . , mot, phrase sera compté comme des mots.



0
votes

Après mes recherches, j'ai trouvé cela en utilisant la fonction max . en utilisant la fonction max pour compter le maximum de mots, puis en imprimant les mots avec le maximum de mots.

A ="I like apple"
B ="I like playing basketball" 
C ="how are you doing"
sentences=[A,B,C]
max_words=0

for sentence in sentences:
    if len(sentence.split(' '))>max_words:
        max_words=len(sentence.split(' '))

for sentence in sentences:
    if len(sentence.split(' '))==max_words:
        print (sentence)

print(max_sentences)

Logique de base de python, sans aucune fonction spéciale:

A ="I like apple"
B ="I like playing basketball" 
C ="how are you doing"
sentences=[A,B,C]

max_words=max(len(x.split(' ')) for x in sentences)

print([i for i in sentences if len(i.split(' '))==max_words])


2 commentaires

La prochaine fois, n'oubliez pas :-)


Ouais sûrement! :)



0
votes

Divisez les phrases et triez-les par nombre de mots:

The sentence: "['how are you doing today?']" has the maximum number of words: 5

Sortie

A = ["I like apple"]
B = ["I like playing basketball"]
C = ["how are you doing today?"]

sorted_sentences = sorted([(sentence, len(sentence[0].split(' '))) for sentence in [A, B, C]], key=lambda x: x[1],
                      reverse=True)
print('The sentence: "{}" has the maximum number of words: {}'.format(sorted_sentences[0][0],sorted_sentences[0][1]))


0 commentaires

1
votes

Essayez ceci:

[len(i[0].split(' ')) for i in listt]


0 commentaires

1
votes

Vous pouvez simplement .count les espaces (mots de séparation): [s pour s dans les phrases si s.count ('') == max (s.count ('') pour s dans les phrases)] ( s [0] si vous avez chaque phrase dans une liste séparée et peut-être obtenir max en premier pour gagner du temps)

Si vos mots peuvent également être séparés par une ponctuation, vous voudrez probablement utiliser re , comme dans votre exemple, simplement findall ing sur chaque phrase em >, comme ceci:

import re
pattern = re.compile(r'\w+')
# note I changed some stuff to have words only separated by punctuation
sentences = [["I like:apple"], ["I (really)like playing basketball"], ["how are you doing"]]
current_s = []
current_len = 0
for s in sentences:
    no = len(pattern.findall(s[0]))  # [0] because you have each sentence in a separate list
    if no == current_len:
        current_s.append(s)
    elif no > current_len:
        current_s = [s]
        current_len = no
print('the most number of words is', current_len)
print('\n'.join(current_s))


0 commentaires

0
votes
['I like playing basketball', 'how are you doing']

0 commentaires