Trouver le caractère le plus fréquent dans une chaîne
J'ai trouvé ce problème de programmation tout en regardant une offre d'emploi sur. Je pensais que c'était assez intéressant et en tant que débutant en Python programmeur, j'ai tenté de l'aborder. Cependant, je sens que ma solution est très salissant......quelqu'un peut vous faire des suggestions pour l'optimiser ou de le rendre plus propre? Je sais que c'est assez trivial, mais j'ai eu plaisir à l'écrire. Remarque: La Version 2.6 De Python
Le problème:
Écrire en pseudo-code (ou code) pour une fonction qui prend une chaîne de caractères et retourne la lettre qui apparaît le plus dans cette chaîne.
Ma tentative:
import string
def find_max_letter_count(word):
alphabet = string.ascii_lowercase
dictionary = {}
for letters in alphabet:
dictionary[letters] = 0
for letters in word:
dictionary[letters] += 1
dictionary = sorted(dictionary.items(),
reverse=True,
key=lambda x: x[1])
for position in range(0, 26):
print dictionary[position]
if position != len(dictionary) - 1:
if dictionary[position + 1][1] < dictionary[position][1]:
break
find_max_letter_count("helloworld")
De sortie:
>>>
('l', 3)
Mis à jour exemple:
find_max_letter_count("balloon")
>>>
('l', 2)
('o', 2)
source d'informationauteur Sunandmoon
Vous devez vous connecter pour publier un commentaire.
Il y a beaucoup de façons de faire plus court. Par exemple, vous pouvez utiliser le
Compteur
classe (en Python 2.7 ou plus tard):Si vous n'avez pas cela, vous pouvez faire le compte manuellement (2.5 ou version ultérieure a
defaultdict
):Cela dit, il n'y a rien de trop terriblement mal avec votre mise en œuvre.
Si vous utilisez Python 2.7, vous pouvez le faire rapidement en utilisant des collections de module.
des collections est une haute performance des structures de données du module. Pour en savoir plus
http://docs.python.org/library/collections.html#counter-objects
Si vous voulez avoir tous les personnages avec le maximum de nombre de chefs d'accusation, alors vous pouvez faire une variation sur l'un des deux idées proposées jusqu'à présent:
Cela donne, par exemple:
Cela fonctionne avec n'importe quelle séquence: les mots, mais aussi ['hello', 'hello', 'bonjour'], par exemple.
La
heapq
structure est très efficace pour trouver le plus petit des éléments d'une séquence sans tri complètement. D'autre part, puisqu'il n'y a pas beaucoup de lettre dans l'alphabet, vous pouvez également exécuter à travers la liste triée de compte jusqu'à ce que le nombre maximal est pas plus trouvée, sans encourir aucune sérieux une perte de vitesse.Voici la façon de trouver le personnage le plus commun à l'aide d'un dictionnaire
Ici sont quelques choses que je ferais:
collections.defaultdict
au lieu de ladict
vous permet d'initialiser manuellement.max
au lieu de travailler vous-même - c'est plus facile.Voici mon résultat final:
frequencies
est une liste de tuples que de compter les caractères que(character, count)
. Nous appliquons max pour les tuples à l'aide decount
's et de retour que tuple decharacter
. En cas d'égalité des voix, cette solution permettra de ne choisir qu'un seul.Question :
Les plus fréquentes de caractère dans une chaîne
Le maximum se produisant caractère dans une chaîne d'entrée
Méthode 1 :
Méthode 2 :
Méthode 3 :