我有一个字典文本,我试图在这个字典文本中找到包含指定字符的最长单词。这些字母将由用户输入。例如,如果用户输入“红色”,则程序必须找到包含“r”,“e”和“d”的最长单词。我能够找到包含“r”,“e”或“d”的单词。 如何缩小处所以使存储的单词包含用户输入的所有字母,而不管它们的输入顺序如何?
答案 0 :(得分:0)
你可以试试这个:
letter = input("Please enter the letters to include: ")
data_file = open("dictionary.txt").read().splitlines()
words = [i for i in data_file if all(b in i for b in letter)]
print(max(words, key = len))
此算法循环显示单词列表并创建一个新列表,其中包含来自用户输入的每个字母的所有单词。然后,代码从过滤后的列表中找到最长的单词。
答案 1 :(得分:0)
您可以使用内置的set
类型来简化和加速您想要执行的操作,因为它们可以快速测试文件的每个单词中是否包含所有字母。我还建议您使用with
语句自动确保文件已关闭。
如果"dictionary.txt"
文件的格式是每行一个字,则可以加快速度。但是,由于您从未描述过它是什么,因此以下并不假设并且应该在文件的每一行上是否有一个或几个。
dict_filename = "dictionary.txt"
outp_filename = "find_right_words.txt"
# user's input
letters = input("Please enter the letters to include: ")
letters = set(letters) # convert string to set of characters
print("searching for letters: {}".format(', '.join(sorted(letters))))
# find all words in dictionary file that contain all the letters and store them in a file
with open(dict_filename, "r") as data_file, \
open(outp_filename, "w") as find_right_words:
for line in data_file:
for word in line.split():
if letters.issubset(word): # all letters in word?
find_right_words.write(word+'\n')
print("file {!r} created".format(outp_filename))
但是,如果您要做的就是找到包含所有字母的最长单词,那么您真的不需要创建"find_right_words.txt"
文件,因为这可以与单词同时确定正在检查文件中。
这就是我的意思:
# find longest word in dictionary file that contains all the letters
with open(dict_filename, "r") as data_file:
longest_word_len = 0
for line in data_file:
for word in line.split():
if(len(word) > longest_word_len # is word longer than longest word...
and letters.issubset(word)): # and all letters in it?
longest_word, longest_word_len = word, len(word)
print("longest word found: {!r}".format(longest_word))
请注意,如果有多个相同长度的单词包含所有字母,则会忽略除第一个以外的所有单词。