Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 查找字符串中最常出现的字符_Python_String_Dictionary - Fatal编程技术网

Python 查找字符串中最常出现的字符

Python 查找字符串中最常出现的字符,python,string,dictionary,Python,String,Dictionary,这段代码将查找字符串中出现频率最高的chr,它几乎可以通过字典正常工作,但不幸的是,当有两个键的频率相同时,我想让它返回最后一个键,但它返回第一个键 这就是我到目前为止所做的: def most_frequent_letter(s): st = s.lower().replace(' ', '') frequencies = {} for items in st: if items in frequencies: frequenci

这段代码将查找字符串中出现频率最高的chr,它几乎可以通过字典正常工作,但不幸的是,当有两个键的频率相同时,我想让它返回最后一个键,但它返回第一个键

这就是我到目前为止所做的:

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”。

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()将返回列表中的最高值。键参数使用单个参数函数自定义排序顺序,在本例中为letters.count。该函数应用于iterable上的每个项目

letters.count是list的内置函数。它接受一个参数并计算该参数的出现次数。因此,letters.count('m')将返回3,letters.count(a)将返回3

set(test)返回test中的所有唯一值,因此{3,3}


所以我们在这一行代码中所做的就是获取test的所有唯一值,即{1,3}。接下来,max将对它们应用list.count函数并返回最大值。

是的,您可以同时获得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)

在python中,当您使用max函数时,输出将是“ma”

,它将返回第一个最大频率,如果您想要第二个最大频率,可以尝试从列表中删除“m”,这样第一个最大频率将是“a”。

以下是创建反向频率字典的方法。我还使用了一个:


collections
库中有
计数器
为您完成这项工作:我们用较低的大小写对单词进行规范化,并在反转字符串之前替换空格,使其首先具有最后的外观


从收款进口柜台
word='mmmaaa'
字符=计数器(反转(word.lower().replace(“”,,))
#最常见
打印(字符。最常见(1))

非常感谢它能起作用。计数器能起作用吗?如果是这样,那会更有效吗?我在下面提供了一个代码。@Prayson:可以使用
计数器
来确定频率,而且它可能比用户编写的任何程序都要快,因为它是一个标准的库类。不确定反向字典部分是如何利用具有相同计数的多个项的处理方式的,但是
计数器
class'
most_common()
方法使这一点毫无意义。
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