Python 在节省内存的同时生成无限的字母组合流?

Python 在节省内存的同时生成无限的字母组合流?,python,string,memory,memory-management,itertools,Python,String,Memory,Memory Management,Itertools,我试图编写一个程序,以不同的组合(从“a”开始,到“zzzzzz*”)逐个生成字符串,并将字符串转换为散列,然后检查散列以与另一个散列进行比较。我目前正在使用itertools来完成这项任务,但是它似乎生成了一个相当大的字符串列表,并在处理之前将它们一次存储在内存中 当在命令行中运行下面的代码大约5分钟时,命令行本身占用了超过4GB的内存,我相信可以大大减少内存 我想做的是:1)一次生成一个字符串,而不是在数组中;2)以这样一种方式管理内存:在我使用该字符串后,可以手动或通过垃圾收集器将其从内存

我试图编写一个程序,以不同的组合(从“a”开始,到“zzzzzz*”)逐个生成字符串,并将字符串转换为散列,然后检查散列以与另一个散列进行比较。我目前正在使用
itertools
来完成这项任务,但是它似乎生成了一个相当大的字符串列表,并在处理之前将它们一次存储在内存中

当在命令行中运行下面的代码大约5分钟时,命令行本身占用了超过4GB的内存,我相信可以大大减少内存

我想做的是:1)一次生成一个字符串,而不是在数组中;2)以这样一种方式管理内存:在我使用该字符串后,可以手动或通过垃圾收集器将其从内存中删除。我怎样才能做到这一点

#!/bin/env/python
import itertools
import string
import hashlib

def stringGen(charset, maxlength):
    return (''.join(candidate)
        for candidate in itertools.chain.from_iterable(itertools.product(charset, repeat=i)
        for i in range(1, maxlength + 1)))
i=0        
for attempt in stringGen(string.ascii_lowercase, 10):
    i+=1
    aHash = hashlib.sha256(attempt).hexdigest()
    print attempt
    print aHash + " " + str(i) + "\n"
    if aHash == hashlib.sha256("longword").hexdigest():
        print "matched" 
        break

您似乎正在寻找生成器表达式。例如,请参阅。
itertools
是“为有效循环创建迭代器的函数”-您确定它们将所有内容都存储在内存中吗?我们无法判断,因为您没有显示任何代码。这也可能有帮助:将每个字符串作为一行写入文件,而不是数组。如果它在数组中,它就在内存中。