从python的机架中拼字拼写

时间:2019-02-15 01:45:32

标签: python python-3.x

例如,如果我在架子上有“ QOFTHEA”,我想创建从2到7的所有可能的单词长度组合,以将它们与另一个单词列表来源进行比较。我应该如何在python中创建它?

2 个答案:

答案 0 :(得分:0)

您可以使用use itertools.permutationsitertools.chain.from_iterable

from itertools import chain, permutations

rack = 'QOFTHEA'

lo, hi = 2, 7

for perm in chain.from_iterable(permutations(rack, i) for i in range(lo, hi + 1)):
    print(perm)

如果您希望使用字符串而不是字符元组,则可以执行''.join(perm)

答案 1 :(得分:0)

而不是检查一长串所有的排列(对于7个字母,{5912是好的,但是对于10个字母,4 037 912的可能性是没有争议的)。我建议对照字母检查列表(复杂度现在取决于列表的长度,根据定义,列表的长度比所有排列都短)。这样可以避免将整个字典加载到内存中,因为它可能很大:

from collections import Counter
rack = Counter('QOFTHEA')
with open('words.txt') as f:
    for word in (i[:-1] for i in f):
        if len(word) > len(rack):
            continue
        word_counter = Counter(word)
        for l, c in word_counter.items():
            if l not in rack:
                break
            else:
                if c > rack[l]:
                    break
        else:
            print(word)

如果由于某种原因您不想使用标准库:

def Counter(iterable):
    dic = {}
    for i in iterable:
        if i not in dic:
            dic[i] = 1
        dic[i] += 1
    return dic

好乱!