将排列与单词列表进行比较 - Python

时间:2014-10-14 02:41:16

标签: python string set permutation

我试图将字符串排列的输出与字典中几乎每个单词的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()

道歉!

3 个答案:

答案 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)