11
votes

Trouver le personnage le plus fréquent dans une chaîne

J'ai trouvé ce problème de programmation tout en regardant un emploi sur vous. Je pensais que c'était assez intéressant et en tant que programmeur de python débutant, j'ai tenté de l'aborder. Cependant, je sens ma solution est assez ... Messy ... Quelqu'un peut-il faire des suggestions pour l'optimiser ou le rendre plus propre? Je sais que c'est assez trivial, mais je me suis amusé à l'écrire. Remarque: Python 2.6

Le problème: strong> p>

écrire pseudo-code (ou code réel) pour une fonction qui prend une chaîne et renvoie la lettre qui apparaît le plus dans cette chaîne. p>

ma tentative: strong> p> xxx pré>

Sortie: strong> p>

find_max_letter_count("balloon") 
>>>
('l', 2)
('o', 2)


3 commentaires

Remarque accessoire: vous devriez lire PEP 8 , qui documente le codage python recommandé style. Les méthodes doivent être dans Snake_Case plutôt que dans des mixtes.


Dupliqué possible de Comment trouver les éléments les plus courants d'une liste? < / a>


Dupliqué possible de Python L'élément le plus courant dans une liste


14 Réponses :



0
votes

Voici quelques choses que je ferais:

  • Utilisez collections.defaultDict au lieu du dict vous initiez manuellement.
  • Utilisez le tri des intégrés et des fonctions maximales telles que max au lieu de l'exploiter vous-même - c'est plus facile.

    Voici mon résultat final: xxx


2 commentaires

Nitpicking: lettres serait plus correct comme lettre , puisqu'il s'agit d'une variable contenant exactement une lettre.


@Eol: vrai; Je n'ai pas renommé cette variable de ce qu'il avait - je l'ai mis comme Char moi-même, je pense, comme ce n'est pas juste une lettre ...




1
votes

Si vous voulez avoir tous les caractères avec le nombre maximal de comptes, vous pouvez faire une variation sur l'une des deux idées proposées jusqu'à présent:

lebigot@weinberg /tmp % python count.py
('l', 2)
('o', 2)
('he', 2)
('ll', 2)


0 commentaires

2
votes

Voici comment trouver le caractère le plus courant à l'aide d'un dictionnaire

message = "hello world"
d = {}
letters = set(message)
for l in letters:
    d[message.count(l)] = l

print d[d.keys()[-1]], d.keys()[-1]


0 commentaires

0
votes
def most_frequent(text):
    frequencies = [(c, text.count(c)) for c in set(text)]
    return max(frequencies, key=lambda x: x[1])[0]

s = 'ABBCCCDDDD'
print(most_frequent(s))
frequencies is a list of tuples that count the characters as (character, count).  We apply max to the tuples using count's and return that tuple's character.  In the event of a tie, this solution will pick only one.

0 commentaires

-1
votes
#file:filename
#quant:no of frequent words you want

def frequent_letters(file,quant):
    file = open(file)
    file = file.read()
    cnt = Counter
    op = cnt(file).most_common(quant)
    return op   

3 commentaires

Merci pour ce code Snippet, qui pourrait fournir une aide limitée et immédiate. Une explication appropriée améliorerait considérablement sa valeur à long terme en montrant pourquoi c'est une bonne solution à la problème, et le rendrait plus utile aux futurs lecteurs avec d'autres questions similaires. S'il vous plaît Modifier Votre réponse Pour ajouter une explication, y compris les hypothèses que vous avez apportées. Plus précisément, où est-ce que compteur vient?


Le compteur doit être importé, c'est à l'aide de la commande 'du compteur d'importation de collections'


S'il vous plaît Modifier Votre réponse pour afficher les informations supplémentaires, plutôt que de l'écrire comme un commentaire. Les commentaires peuvent disparaître sans trace, il a donc vraiment besoin de faire partie de votre réponse. Merci.



1
votes

Question: Caractère le plus fréquent dans une corde Le caractère maximum survenant dans une chaîne d'entrée

Méthode 1: P>

import collections

a = "GiniGinaProtijayi"

aa = collections.Counter(a).most_common(1)[0]
print(aa)


0 commentaires

1
votes

J'ai remarqué que la plupart des réponses ne reviennent qu'avec un article, même s'il y a une quantité égale de caractères le plus couramment utilisé. Par exemple "III 444 AAAAA 999". Il y a une quantité égale d'espaces, je, 4, y, y et 9. La solution devrait revenir avec tout, pas seulement la lettre I:

sentence = "iii 444 yyy 999"

# Returns the first items value in the list of tuples (i.e) the largest number
# from Counter().most_common()
largest_count: int = Counter(sentence).most_common()[0][1]

# If the tuples value is equal to the largest value, append it to the list
most_common_list: list = [(x, y)
                         for x, y in Counter(sentence).items() if y == largest_count]

print(most_common_count)

# RETURNS
[('i', 3), (' ', 3), ('4', 3), ('y', 3), ('9', 3)]


0 commentaires

1
votes

Voici un moyen d'utiliser pour boucle et compter () xxx


0 commentaires

1
votes

La façon dont je n'ai utilisé aucune fonction intégrée de Python lui-même, uniquement pour les boucles et les déclarations si. XXX

Cela garantit que vous obtenez chaque lettre / personnage qui est utilisé le plus , et pas seulement un. Cela revient également à quelle fréquence cela se produit. J'espère que cela aide :)


0 commentaires

0
votes

Si vous ne pouviez pas utiliser de collections pour une raison quelconque, je suggérerais la mise en œuvre suivante:

s = input()
d = {}

# We iterate through a string and if we find the element, that
# is already in the dict, than we are just incrementing its counter.
for ch in s:
    if ch in d:
        d[ch] += 1
    else:
        d[ch] = 1

# If there is a case, that we are given empty string, then we just
# print a message, which says about it.
print(max(d, key=d.get, default='Empty string was given.'))


0 commentaires

-1
votes
# This code is to print all characters in a string which have highest frequency
 
def find(str):
      
    y = sorted([[a.count(i),i] for i in set(str)])
  # here,the count of unique character and the character are taken as a list  
  # inside y(which is a list). And they are sorted according to the 
  # count of each character in the list y. (ascending)
  # Eg : for "pradeep", y = [[1,'r'],[1,'a'],[1,'d'],[2,'p'],[2,'e']]

    most_freq= y[len(y)-1][0]   
  # the count of the most freq character is assigned to the variable 'r'
  # ie, most_freq= 2

    x= []

    for j in range(len(y)):
       
        if y[j][0] == most_freq:
            x.append(y[j])
      # if the 1st element in the list of list == most frequent 
      # character's count, then all the characters which have the 
      # highest frequency will be appended to list x.
      # eg :"pradeep"
      # x = [['p',2],['e',2]]   O/P  as expected
    return x

find("pradeep")

1 commentaires

Pouvez-vous fournir une explication à ce code et expliquer comment est-ce meilleur / pire que les autres solutions?



0
votes
sentence = "This is a great question made me wanna watch matrix again!"

char_frequency = {}

for char in sentence:
    if char == " ": #to skip spaces
        continue
    elif char in char_frequency:
        char_frequency[char] += 1 
    else:
        char_frequency[char] = 1


char_frequency_sorted = sorted(
    char_frequency.items(), key=lambda ky: ky[1], reverse=True
)
print(char_frequency_sorted[0]) #output -->('a', 9)

0 commentaires