我想做一个能够生成长度小于或等于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分钟花费更少的时间来生成单词?
答案 0 :(得分:0)
使用itertools.imap
和itertools.ifilter
而不是map
和filter
函数,因为它们会生成迭代而不是列表。哪个应该允许避免创建map
生成的大型列表,其中必须包含1073741824(4 ** 15)个元素。
S = itertools.product('AaBb', repeat=n)
SS = itertools.imap(lambda x: ''.join(x), S)
SSS = itertools.ifilter(inv, SS)