我已经创建了一个函数,用于在文本文件中查找最长的单词,并在可以由9个字母组成的文本文件中查找最长的单词。我是python的新手,我正在创建一个类似于倒计时的游戏。
我已经创建了一个函数来查找文本文件中最长的单词。我现在想要的是创建python代码来查找可以由9个字母组成的最长单词。
每个字母只能使用一次。因此,从“qugteroda”中,我应该被抹黑,愤怒,大胆,朗读,愤怒,读出。我使用的是python 2.2
def Words():
qfile=open('dict.txt','r')
longg=''
for line in qfile:
if len(line)>len(longg):
longg=line
return longg
发布于 2013-05-04 03:04:30
我会这样做:
from collections import Counter
def find_words(valid_letters):
valid_letters = Counter(valid_letters)
with open('dict.txt', 'r') as handle:
for word in handle:
letters = Counter(word.strip())
if valid_letters >= letters:
yield word
longest_word = max(find_words('qugteroda'), key=len)
它的要点是你计算你的单词中有哪些字母。如下所示:
>>> count_letters('test')
{'t': 2, 'e': 1, 's': 1}
然后检查这些字母是否都在您的有效字母字典中(确保计数也等于或小于允许的计数)。
然后,你只需要找到最长的单词。
要找到最长的单词组合,请创建一个递归函数,该函数构建符合字母约束的单词链。
发布于 2013-05-04 03:06:06
使用itertools获取排列:
list(itertools.permutations("qugteroda")
对于列表中的每个元素,检查字典文件中是否存在该单词。
您可以在字典中检查Trie以实现快速查找。
发布于 2013-05-04 03:26:27
1/创建由字母组成的排序字符串:
qugteroda -> adegoqrtu
the_letters = 'adegoqrtu'
2/从word文件中的所有单词创建一个列表,该列表应该在开头具有最大长度的单词,在末尾具有较小的单词,这将加快搜索N个最大单词的速度。
例如:international, ragouted,facebook,outraged, outdare, outread, outrage,readout
这个单词列表将不会按原样包含单词,但包含单词的排序表示。将此search_dict存储在缓存或文件中以备将来使用。
例如:search_dict = ['aaeiilnnnortt' , 'adegortu' ,'abcefkoo','adegortu']
3/要找到N个最大的单词,只需循环遍历search_dict,并不断添加单词,这些单词是the_letters
字符串中字符的子集。一旦找到N个单词,就可以退出循环。
https://stackoverflow.com/questions/16365807
复制相似问题