[英]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)]
您可以使用count
和set
的组合来运行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)
显而易见的答案是使用以字母为键的字典。 您还可以使用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.