猿问

来自python机架的拼字游戏组合

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


萧十郎
浏览 138回答 2
2回答

潇湘沐

而不是根据长列表检查所有排列(59127 个字母很好,但4 037 91210 个字母的可能性无法计算)。我建议根据字母检查列表(复杂性现在取决于列表的长度,根据定义,列表的长度比所有排列都短)。这允许您不将整个字典加载到内存中,因为它可能非常大:from collections import Counterrack = 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

回首忆惘然

您可以使用itertools.permutations和itertools.chain.from_iterable:from itertools import chain, permutationsrack = 'QOFTHEA'lo, hi = 2, 7for perm in chain.from_iterable(permutations(rack, i) for i in range(lo, hi + 1)):    print(perm)如果你想要一个字符串而不是一个字符元组,你可以做''.join(perm).
随时随地看视频慕课网APP

相关分类

Python
我要回答