【发布时间】:2018-10-26 09:59:10
【问题描述】:
我试图生成 128 位的所有排列并将它们存储在某种结构中。我在其他 Stack Overflow 问题中发现了一些有用的信息:
keys = map(''.join,itertools.product('01',repeat=n))
问题在于,这个解决方案仅对足够小的 n 值有用,因为它将值作为字符串存储在列表中,因此序列中的每个位都是一个字节,这意味着每个排列都是 128 个字节长
对于像n=128 这样的高值,将所有排列存储为字符串是不可能的。 (使用n=128 执行itertools.product() 时,我的计算机内存不足)。而将排列存储为原始字节意味着每个排列有 16 个字节。
我的问题是如何归档与intertools.product 相同的结果,但要处理字节。
【问题讨论】:
-
map在 Python-3.x 中不会将值存储在list中。此外,2**128元素的数量足以破坏您的系统,无论它们是如何存储的。即使每个排列只有一个位,您也需要更多10**25 Terabyte。 -
我确信可以按照你的要求去做,但是你不应该用完内存,除非你尝试一次在内存中拥有所有的排列(通过使用类似 @987654332 @. 这是因为
map()返回一个 iterator 对象。如果你只是用for value in keys:之类的东西遍历它,那么只会创建一个(128 个字符的字符串)一次。 -
@martineau 那时你可能不会用完空间,但你肯定会用完时间 =)
-
@schwobaseggl:好点。除非他们有一台非常非常非常快的计算机...
;¬) -
victor:只是出于好奇,你打算对所有这些排列做什么?
标签: python python-3.x permutation