我试图将字符串排列的输出与字典中几乎每个单词的txt进行比较。函数本身是一个anagram求解器。
该函数将word作为参数。这基本上就是我所拥有的
def anagram(word):
{c for c in permutations(word,len(word))}
这个输出会给我一组可能的单词组合。
如果word = dog,输出将为:
[{'d','g','g'},{'g','o','d'}
加上其他6个左右的组合。
我想将此排列的结果与单词列表进行比较,然后返回单词(s),这些单词是原始单词的字谜。
所以
if result (god or dog or dgo or gdo...) is in word_list:
return result
提前致谢!
修改
抱歉,我没有明确说明单词列表已作为一个集/列表导入。
代码是:
def load_words():
name = 'words.2-10.txt'
if isfile(name):
all_words = [ l.rstrip() for l in open(name, 'r') ]
as_lists = {}
for size in range(2, 11):
as_lists[size] = [ word for word in all_words if len(word) == size ]
as_sets = { size : (set(words) if words else None) for size, words in as_lists.iteritems() }
return as_lists, as_sets
return None, None
word_lists,word_sets = load_words()
道歉!
答案 0 :(得分:1)
首先,你可以从文件中获取所有单词,并使用set comprehension形成一个集合,就像这样
with open("strings.txt") as strings_file:
words = {line.strip() for line in strings_file}
然后,当您生成排列时,只需将它们加入"".join
,就像这样
def anagram(word):
return {"".join(c) for c in permutations(word, len(word))}
然后你可以简单地设置交集操作,就像这样
print words & anagram("dog")
现在,您可以使用同一组words
来比较任意数量的排列,例如
print words & anagram("cabbage")
print words & anagram("Jon")
print words & anagram("Ffisegydd")
答案 1 :(得分:1)
import itertools
def anagram(word):
for w in itertools.permutations(word):
yield ''.join(w)
def main():
word = input("Enter a word: ")
listOfWords = ['some', 'list', 'of', 'words']
for w in anagram(word):
if w in listOfWords:
print(w, 'is in the list')
答案 2 :(得分:0)
这是python sets的一种方法。如果你需要一种比集更有效的方法,你应该研究生成器(yield)和filte方法。
from itertools import permutations
word_list = set(["god", "dog", "bla"])
def anagram(word):
perm = [''.join(p) for p in permutations(word)]
return set(perm)
dog = anagram("dog")
print word_list.intersection(dog)