Python-可能会给定输入字母的英文单字词字母。
我知道以前已经询问过这种方法的变体,但是我无法理解任何以前的实现,因为它们大多数涉及使用集和issubset方法。
这是我要尝试的操作:我在词典中有一组单词和可能的字母列表。我想确定是否可以通过重新排列列表中的字母来组成集合的成员。这是我当前的实现:
def solve(dictionary, letters):
for word in dictionary: #for each word in the dictionary
if len(word) > len(letters): # first optimization, doesn\'t check words that are larger than letter set
continue
else:
scrambledword = \"\".join([b for b in sorted(list(word))]) #sorts the letters in each word
if set(scrambledword).issubset(letters):
print word
def main():
dictionary = set([x.strip() for x in open(\"C:\\\\Python27\\\\dictionary.txt\")])
letters = sorted([\'v\',\'r\',\'o\',\'o\',\'m\',\'a\',\'b\',\'c\',\'d\'])
solve(dictionary, letters)
main()
此实现的明显问题是,会发现某些单词在“字母”中使用多个字母。例如,单词“'cardboard \'显示为有效单词,尽管只有\\的一个副本。字母列表中的“ a \”和\“ r \”。如何在列表上使用\“ issubset \”方法?
没有找到相关结果
已邀请:
3 个回复
场竟矩喘崩
给予
Counter是一个方便的实用程序类:
[DSM:退货!我删除了一个社区编辑,因为该计数器实例不可散列,因此无法进行社区编辑。] 如果需要考虑搜索速度,则可以权衡一下内存和预计算时间:
[呵呵。我只是注意到\ thistles \'本身不在列表中,但这是因为它不在word文件中。 是的,单词文件中确实有明显的“ nonwords”:
旦彤
并将这些新单词放在一组
中 然后,您的函数可以对字母调用字母顺序,并检查结果是否在字典中。
字母顺序功能是字谜的一个特征:当且仅当两个单词应用字母顺序产生相同的结果时,它们才是彼此的字谜。
屉杆绊
现在,我们将词汇表预处理为字母-> {anagram1,anagram2,...}的字典:
您的\'solve \'函数现在需要O(1)时间:
例: