如何从内存中删除不正确的结果?

时间:2016-11-06 18:14:18

标签: python-3.x comparison product itertools

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?任何进一步的阅读也会有所帮助。

1 个答案:

答案 0 :(得分: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
相关问题