2016-11-06 99 views
0
import itertools 
printable = 'abcdefghijklmnopqrstuvwxz' 
all_possibilites = ([''.join(i) for i in itertools.product(printable, repeat = 3)]) 
comparison = ['zd'] 
if comparison in all_possibilities: 
    print("match") 

这是我的代码片段。我的意图是生成每一个字母组合。这里的片段有三个字符的限制。限制过大的python会返回内存错误。我的问题是:我如何从内存中删除不正确的结果?

有没有办法从内存中删除不匹配的组合,以便唯一的限制是时间而不是内存?说如果字符限制是5?任何进一步的阅读也会有所帮助。

+0

你试图达到的目的究竟是什么?你的意思是所有可能的字母组合?随着您将重复大小增加到无穷大,将会有无限组合。你所做的任何n字母组合都会存在,那么比较的目的是什么?如果我有itertools.product(范围(3),重复= 3),您将有每个可能的3位组合0,1和2 - 您不需要检查它是否存在。当然,记忆会快速填满...... n = 5时你已经有26^5个组合。 – Daniel

回答

0

主要的错误是您首先创建完整列表然后尝试将其过滤掉。这是一个问题,因为你在内存中带来了完整的列表。

你会更好的加入条件列表解析里,让你真正需要的所有元素:

all_posibilities = ["".join(i) for i in itertools.product(printable, repeat = 5) if 'a' or 'b' in i] 
             ## ^^ place your condition here 
print(len(all_posibilities)) 

或者,如果你正在寻找通过all_posibilities到底迭代,它创建生成器以进一步限制内存占用情况是有意义的:

all_posibilities = ("".join(i) for i in itertools.product(printable, repeat = 5) if 'a' or 'b' in i) 
for i in all_posibilities: 
    # do things