如何在python中返回大多数重复的字母?

时间:2017-10-09 19:00:25

标签: python

我已经做了一些挖掘并且大多数都使用了数组,但我们的类并不是那么远,我们主要用于循环来返回函数中最重复的字母。

到目前为止,这是我的代码,但我能得到的只是返回第一个字母的数量。

def most_repeated_letters(word_1):
  x = 0
  z = 0
  for letter in word_1:
    y = word_1.count(letter[0:])
    if y > z:
      z = y
    x += 1
    return z

print most_repeated_letters('jackaby')

5 个答案:

答案 0 :(得分:2)

使用collections.Counter

from collections import Counter
c = Counter('jackaby').most_common(1)
print(c)
# [('a', 2)]

答案 1 :(得分:1)

您的代码存在一些问题:

  • 您计算最常见字母的数量,但不计算字母本身
  • return 里面循环,因此在第一个字母之后
  • 另外,您永远不会使用x,并且letter的切片是不必要的

有些建议可以更好地发现这些错误:

  • 使用更有意义的变量名称
  • 使用两个以上的空格进行缩进

修复这些问题,您的代码可能如下所示:

def most_repeated_letters(word_1):
    most_common_count = 0
    most_common_letter = None
    for letter in word_1:
        count = word_1.count(letter)
        if count > most_common_count:
            most_common_count = count
            most_common_letter = letter
    return most_common_letter

一旦熟悉了Python的基本语言功能,就应该仔细查看builtin functions。实际上,使用word_1.count作为key函数进行比较,可以使用max将整个函数简化为一行。

def most_repeated_letters(word_1):
    return max(word_1, key=word_1.count)

虽然这很短,但效率不高,因为为单词中的每个字母调用count函数,给出函数二次复杂度 O(n²)。相反,您可以使用dict来存储单个字母的数量,并在O(n)中的单个字段中增加这些字数。

def most_repeated_letters(word_1):
    counts = {}
    for letter in word_1:
        if letter not in counts:
            counts[letter] = 1
        else:
            counts[letter] += 1
    return max(counts, key=counts.get)

这与collections.Counter所做的基本相同,如另一个答案所述。

答案 2 :(得分:0)

如果您不想使用馆藏模块:

def mostRepeatedLetter(text):
  counter = {}
  for letter in text:
    if letter in counter: 
      counter[letter]+=1
    else: 
      counter[letter]=1
  max = { letter: 0, quantity: 0 } 
  for key, value in counter.items(): 
    if value > max.quantity: 
      max.letter, max.quantity = key, value
  return max

答案 3 :(得分:0)

如果您不想使用Counter:

def most_repeated_letters(word_1):
    lettersCount = {}
    for ch in word_1:
        if ch not in lettersCount:
            lettersCount[ch] = 1
        else:
            lettersCount[ch] += 1

    return max(lettersCount, key=lettersCount.get)


print(most_repeated_letters('jackabybb'))

答案 4 :(得分:0)

这是一个适用于多个的代码:

def most_repeated_letters(word_1):

    d = {}

    for letter in word_1:      
        if not d.get(letter):
            d[letter] = 0
        d[letter] = d.get(letter) + 1

    ret = {}

    for k,v in d.iteritems():
        if d[k] == max(d.values()):
            ret[k] = v

    return ret

most_repeated_letters('jackaby')