有限生成的单词

时间:2015-03-29 03:38:59

标签: python-2.7 itertools sage

我想做一个能够生成长度小于或等于n的单词的算法,它不包含某些字符串,并且当我生成长度的单词时生成所有单词所需的时间不到一两分钟15或更多。 我生成它们的实际代码是:

def inv(mob):
    if 'aA' in mob:
        return False
    elif 'Aa' in mob:
        return False
    elif 'Bb' in mob:
        return False
    elif 'bB' in mob:
        return False
    else: return True

S=itertools.product('AaBb',repeat=n)

SS=map(lambda x: ''.join(x),S)

SSS=filter(inv,SS)

(其中n是长度) 当我创建长度为n = 10的单词时,需要3秒钟,但我需要在不到一分钟的时间内生成至少长度n = 15,当我尝试使用n = 15时,我的计算机就会死机。有人知道是否存在一种简单的方法?或者这个问题比2分钟花费更少的时间来生成单词?

1 个答案:

答案 0 :(得分:0)

使用itertools.imapitertools.ifilter而不是mapfilter函数,因为它们会生成迭代而不是列表。哪个应该允许避免创建map生成的大型列表,其中必须包含1073741824(4 ** 15)个元素。

S = itertools.product('AaBb', repeat=n)
SS = itertools.imap(lambda x: ''.join(x), S)
SSS = itertools.ifilter(inv, SS)