-3
votes

Comment connaître le nombre de noms commençant par chaque lettre d'un fichier texte à l'aide de Python

J'ai besoin de savoir comment je peux calculer le nombre de mots dans la liste qui commencent par la lettre A, B, C. Z.

Ici, je laisse la partie de lecture du fichier TXT < Pré> xxx

Je dois calculer le nombre de mots qui commencent par [a ... z]. Pour des exemples.

  • Il y a 3 mots qui commencent par un.
  • Il y a 20 mots qui commencent par b.
  • etc ..

    Ici, je laisse la solution au problème. Remerciant ceux qui m'ont aidé !! xxx


5 commentaires

Il semble que votre principal devrait être une fonction, pas une classe.


UPSS Oui, désolé


Comment sont vos données de fichier? Qu'avez-vous essayé jusqu'à présent, autrement que de lire le contenu du fichier?


Pour l'instant, j'essaye avec XS = liste (filtre (Lambda x: x [0] == 'A', lignes)) Pour voir si plus tard, je peux créer un tuple afin que j'ai quelque chose comme ça ('a', 4), ('B', 1)


Quant à txt, chaque ligne n'a qu'un mot. Oui, il est déjà commandé par l'alphabet.


3 Réponses :


1
votes

suppose que, il y a un nom de liste Liste code> qui ont 3 éléments: xxx pré>

et ont un tableau qui ont 26 éléments. P>

array = ["0", "0", ......"0", "0"......"0","0"]


4 commentaires

Vous devriez toujours nommer vos variables Python avec toutes les lettres minuscules, elles ne sont donc pas confondues avec des classes, par exemple.


Bonjour, cela me montre la sortie suivante: [((A ', 0), (' B ', 0), (' c ', 0), (' d ', 0), (' E ', 0), ('f', 0), ('g', 0), ('h', 0), ('i', 0), ('J', 0), ('k', 0), (' l ', 0), (' m ', 0), (' n ', 0), (' o ', 0), (' P ', 0), (' Q ', 0), (' R ' , 0), ('s', 0), ('t', 0), ('u', 0), ('v', 0), ('y', 0), ('x', 0) ), ('y', 0), ('z', 1)] Les valeurs n'augmentent pas


La question est pourquoi? pour z >> ('z', 1).


@Shuvokarmakar Il me montre que tuple ('Z', 1) parce que ma solution ne fonctionnait pas très bien. Mais j'ai déjà réussi à résoudre le problème en utilisant les éléments suivants: k = {lettre: 0 pour la lettre de la liste (string.ascii_lowercase)}



1
votes

Donc, selon votre réponse mise à jour (1 mot par ligne, déjà trié par ordre alphabétique), quelque chose comme ça devrait fonctionner: xxx

update:

Il est bon que vous ne vouliez pas simplement une solution réaymade, mais votre code a quelques problèmes et certains points ne sont pas super pythoniques, c'est pourquoi j'ai suggéré de le faire comme ci-dessus. Si vous voulez vraiment aller avec votre solution, vous devez corriger votre fonction compteur de contrebaltter . Le problème avec c'est que vous ne stockez pas réellement les résultats nulle part, vous retournez toujours une nouvelle gamme de résultats pour chaque mot. Vous avez probablement un mot commençant par "Z" comme dernier mot du fichier, d'où le résultat ayant 0 comme comptage pour toutes les lettres, sauf "Z ', qui en a un. Vous devez mettre à jour vos valeurs pour la lettre actuelle dans cette fonction, au lieu de calculer l'ensemble de la matrice à la fois.


3 commentaires

Votre solution fonctionne bien! Mais j'aimerais voir si je peux le faire avec ma solution. Pour l'instant avec ma solution me renvoie [(A ', 0), (' B ', 0), (' C ', 0), (' d ', 0), (' E ', 0), (' f ', 0), (' g ', 0), (' h ', 0), (' i ', 0), (' J ', 0), (' k ', 0), (' l ' , 0), ('m', 0), ('n', 0), ('o', 0), ('p', 0), ('Q', 0), ('R', 0), ), ('s', 0), ('t', 0), ('u', 0), ('v', 0), ('y', 0), ('x', 0), ('y', 0), ('z', 1)]


@Chrisperez J'ai mis à jour ma réponse pour parler un peu de moyens de corriger votre code, puis :)


@Chrisperez a fait des réponses ici vous aidez à atteindre votre solution? Si oui, veuillez en marquer l'un d'entre eux comme la bonne réponse. Sinon, s'il vous plaît laissez-nous savoir ce qui manque :)



1
votes

Je suggérerai de changer un peu votre code comme celui-ci.

Utilisez Collection.defaultDic t définit sur INT AS la valeur: Utilisation de la première lettre en tant que clé du Dictionnaire Vous pouvez incrémenter sa valeur chacune il y a une correspondance. Donc: xxx

définir xs comme xs = defaultdict (int)

changer < code> pour i in lignes: corps à xxx

si vous imprimez xs à la fin du pour boucle Vous obtiendrez quelque chose comme: xxx

Les clés de la dicte sont sensibles à la casse, afin de transformer le boîtier, si nécessaire.

Vous n'avez pas besoin d'une méthode externe pour faire le travail de comptage.


1 commentaires

Merci mec!! Explication très facile