Python 在节省内存的同时生成无限的字母组合流?
我试图编写一个程序,以不同的组合(从“a”开始,到“zzzzzz*”)逐个生成字符串,并将字符串转换为散列,然后检查散列以与另一个散列进行比较。我目前正在使用Python 在节省内存的同时生成无限的字母组合流?,python,string,memory,memory-management,itertools,Python,String,Memory,Memory Management,Itertools,我试图编写一个程序,以不同的组合(从“a”开始,到“zzzzzz*”)逐个生成字符串,并将字符串转换为散列,然后检查散列以与另一个散列进行比较。我目前正在使用itertools来完成这项任务,但是它似乎生成了一个相当大的字符串列表,并在处理之前将它们一次存储在内存中 当在命令行中运行下面的代码大约5分钟时,命令行本身占用了超过4GB的内存,我相信可以大大减少内存 我想做的是:1)一次生成一个字符串,而不是在数组中;2)以这样一种方式管理内存:在我使用该字符串后,可以手动或通过垃圾收集器将其从内存
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
是“为有效循环创建迭代器的函数”-您确定它们将所有内容都存储在内存中吗?我们无法判断,因为您没有显示任何代码。这也可能有帮助:将每个字符串作为一行写入文件,而不是数组。如果它在数组中,它就在内存中。