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))
6 Réponses :
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())))
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.
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])
La prochaine fois, n'oubliez pas :-)
Ouais sûrement! :)
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]))
Essayez ceci:
[len(i[0].split(' ')) for i in listt]
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))
['I like playing basketball', 'how are you doing']
Voulez-vous dire que vous souhaitez renvoyer tous les éléments de la liste à l'exception de celui qui contient le moins de mots?