我已经做了一些挖掘并且大多数都使用了数组,但我们的类并不是那么远,我们主要用于循环来返回函数中最重复的字母。
到目前为止,这是我的代码,但我能得到的只是返回第一个字母的数量。
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')
答案 0 :(得分:2)
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')