这段代码将找到字符串中出现次数最多的字符,并且通过字典几乎可以正常工作,但不幸的是,问题是当有两个键具有相同频率时,我想让它返回最后一个键,但它返回第一个。
这就是我到目前为止所做的:
def most_frequent_letter(s):
st = s.lower().replace(' ', '')
frequencies = {}
for items in st:
if items in frequencies:
frequencies[items] += 1
else:
frequencies[items] = 1
return max(frequencies, key=frequencies.get)
most_frequent_letter('mmmaaa')
Out[48]: 'm'
但是我不知道如何返回 'a' 而不是 'm'。
这是创建反向频率字典的方法。我还通过使用字典理解:
使频率字典及其反向的创建变得相当简洁。def most_frequent_letter(s):
st = s.lower().replace(' ', '')
frequencies = {}
frequencies = {item: frequencies.setdefault(item, 0) + 1 for item in st}
rev_freq = {count: key for key, count in frequencies.items()}
return rev_freq[max(rev_freq)]
print(most_frequent_letter('nnmmmaaa')) # -> a
Python max 函数始终返回第一个最大出现次数。 因此,如果您总是想要最后一个键,那么您可以在代码中反转原始字符串。
def most_frequent_letter(s):
st = s.lower().replace(' ', '')
st = st[::-1]
frequencies = {}
for items in st:
if items in frequencies:
frequencies[items] += 1
else:
frequencies[items] = 1
return max(frequencies, key=frequencies.get)
或者如果您想要最低值的键,请先对字符串进行排序。 您也可以创建自己的 max 函数来满足您的需求。
def most_frequent_letter(word):
letters = list(word)
return (max(set(letters), key = letters.count))
print(most_frequent_letter('mmmaaa'))
# output:m
print(most_frequent_letter('some apples are green'))
# output: e
max() 将返回列表中的最高值。 key 参数采用单个参数函数来自定义排序顺序,在本例中为 letter.count。该函数应用于迭代器上的每个项目。
letters.count 是 list 的内置函数。它接受一个参数并计算该参数出现的次数。所以 letter.count('m') 将返回 3,letters.count(a) 将返回 3。
set(test) 返回 test 中的所有唯一值,因此 {3, 3}
所以我们在这行代码中所做的就是获取 test 的所有唯一值,即 {1, 3}。接下来,max将对它们应用list.count函数并返回最大值。
collections
库有 Counter
可以为您完成这项工作:我们用小写字母标准化单词,并替换反向字符串之前的空格以首先出现最后一次。
from collections import Counter
word = 'mmmaaa'
characters = Counter(reversed(word.lower().replace(' ', '')))
# most common
print(characters.most_common(1))
是的,你可以同时得到 m 和 a,这取决于你想如何获得输出,但我只是举个例子
def most_frequent_letter(s):
st = s.lower().replace(' ', '')
frequencies = {}
for items in st:
if items in frequencies:
frequencies[items] += 1
else:
frequencies[items] = 1
max_val=max(frequencies.values())
result=""
for key,value in frequencies.items():
if value==max_val:
result+=key
return result
result=most_frequent_letter('mmmaaa')
print(result)
输出将为“ma”
在Python中,当您使用max函数时,它将返回第一个最大频率,如果您想要第二个最大频率,您可以尝试从列表中删除“m”,这样之后第一个最大频率将为“a”。
字符串“abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz”中的所有字符恰好出现两次。 由于 'a' 的索引最低,因此字符 'a' 就是答案,因为字符串中字符的频率相同。
如果字符串中的字符出现频率不同,则将取字符串中出现频率最高的字符。
def maximumOccurringCharacter(text):
ASCII_SIZE = 256
ctr = [0] * ASCII_SIZE
max = -1
ch = ''
for i in text:
ctr[ord(i)] += 1
for i in text:
if max < ctr[ord(i)]:
max = ctr[ord(i)]
ch = i
return ch
ch =maximumOccurringCharacter('abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz')
print(ch)
输出:a
底部是出现次数最多的字符的示例代码。
#字母=列表(文本)
#return (max(set(字母), key = 字母.count))
在Python中,当您使用max函数时,它将返回第一个最大频率,如果您想要第二个最大频率,您可以尝试从列表中删除“a”,这样之后第一个最大频率将为“b”。