繁体   English   中英

在单词列表中查找最常见的字母

[英]Finding most common letter in a word list

我正在为游戏子手编写代码。 我陷入了想要帮助用户获得提示的部分。

我需要创建一个接受word list和当前pattern (例如:“ ___ e_”)并返回单词列表中most common letter的函数。

我知道我需要计算每个单词中的字母,然后返回该字母列表的最大值,但是我不太了解如何实际执行此操作。

我从编写以下代码开始:

def choose_letter(words, pattern):
    new_list = [0] * 26
    for i in range(0, 26):
        for n in range(0, len(num_list)):
            if i == num_list[n]:
                new_list[i] += 1

    return new_list

但我被卡住了,因为我不知道如何将其与字母进行实际比较。

我很想听听一些建议或指导,可以帮助我继续前进。

*我们还没有了解字典

您还可以使用集合中的计数器

from collections import Counter
Counter('abracadabra').most_common(3)


output: 
[('a', 5), ('r', 2), ('b', 2)]

您可以使用countset的组合来运行pattern不包含的最频繁的字母,请参见下文。 第一行计算每个字母的出现次数,第二行语句返回最频繁的字母(之一)。

def choose_letter(words, pattern):
    frequencies = [(letter, words.count(letter)) for letter in set(words) if letter not in pattern and letter!=' ']
    most_frequent_letter = max(frequencies, key=lambda x: x[1])[0]
    return most_frequent_letter


word = 'hangman is great fun'
pattern = '____a_____'
print choose_letter(word,pattern)

您可以使用字符串的count()方法来计算字符串中char的出现: 计算字符串中字符的出现

显而易见的答案是使用以字母为键的字典。 您还可以使用ord(char)从字符中获取一个整数,并将该整数用作列表的索引。 由于您的列表长度为26,字母索引从97开始(对于小写字母“ a”),因此您可以执行以下操作:

def choose_letter(words, pattern): 
    new_list = [0] * 26
    for word in words:
        word = word.lower()
        for letter in word:
            index = ord(letter) -97
            new_list[index] += 1
    return new_list

要获取列表中任何给定字母的计数,您可以:

print(new_list[ord(letter)])

要获取最常见的字母(请注意,如果多个字母的值最高,则仅返回第一个字母):

chr(new_list.index(max(new_list)))

你可以试试:

>>> data = "Harsha Biyani"
>>> d = {}
>>> letters = set(data)
>>> for letter in letters :
    d[letter] = data.count(letter)


>>> key, value = max(d.items(), key=lambda x:x[1])  #in python 3
>>> key, value = max(d.iteritems(), key=lambda x:x[1])  # in python 2
>>> key
'a'
>>> value
3
>>> d
{'y': 1, 'H': 1, 'h': 1, ' ': 1, 'n': 1, 'B': 1, 's': 1, 'a': 3, 'i': 2, 'r': 1}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM