我正在建立一个包含所有字母和数字的字典.这段代码的问题是"在第二件事中消耗了100%的记忆".你觉得我的实施不好吗?任何帮助表示赞赏.
from timeit import Timer
from itertools import permutations
dictionary = []
small_alpha = map(chr, range(97,123))
lookup.append(small_alpha)
def test():
for i in permutations(lookup, 10):
dictionary.append(''.join(i))
if __name__ == '__main__':
test()
Run Code Online (Sandbox Code Playgroud)
(已编辑)我受过良好教育.没有黑客的意图.即使我有100台机器,这实际上也是不可能的.没人能计算这么大的数字.只是在某种程度上可以尝试
ken*_*ytm 10
有36个!/(36-10)!= 1022个字母数字字符的922,393,263,052,800个排列(~1千万亿).当然这会占用你所有的记忆.
假设每个字符串需要32个字节来存储(指针为8个字节,长度为8个字节,内容为16个字节*,在64位机器上),这需要26.2 PiB的内存.
无法在普通机器中存储所有排列.请说明你真正想做的事情.
(*:实际上它需要更多,因为还有类型信息,而在Python 3.xa字符中,UTF-16需要2个字节,而列表本身也需要内存.)
即使只有字母表,排列的数量仍然是19,275,223,968,000(~20万亿),并且每串32字节仍需要561 TiB的内存.