我基本上是在寻找可能对此有意见的其他人的一些反馈。以下内容不完全是我正在处理的内容,但示例代码确实重现了该问题。
我有一个幂集生成器,如果我发送的基本列表传入,它会返回所有排列。我需要对生成的集合进行排序(在我的真实情况下,返回的集合是具有我想要排序的值的元组,下面的示例演示了没有它的问题)
问题是当我在电源组生成器上使用 sorted() 时,它会增加内存使用量。我意识到 2^50 是一个非常大的数字,但是没有排序的内存使用量是相当平坦的,所以我想知道是否有更好的方法可以在一两分钟内对大量集合进行排序而不会耗尽内存。这是在带有 Python 2.6.5 的 Ubuntu 上运行的。(在这种情况下也需要)
def gen_powerset(seq):
if len(seq) <= 1:
yield seq
yield []
else:
for i in gen_powerset(seq[1:]):
yield [seq[0]]+i
yield i
def main():
initialSet = range(50)
powerset = sorted(gen_powerset(initialSet))
for i in powerset:
print i
if __name__ == "__main__":
main()
免责声明:如果您尝试运行此示例,请注意您的内存使用情况。如果样本接近 90%,请按 Ctrl-C,因为您的操作系统将开始将内存交换到磁盘。如果样本仍在运行,您的磁盘负载将飙升并真正减慢速度,从而很难首先杀死样本。