【发布时间】:2011-08-27 19:27:04
【问题描述】:
我正在尝试使用 python 进行一些计算,但内存不足。因此,我想读/写一个文件以释放内存。我需要一个非常大的列表对象之类的东西,所以我想为文件中的每个对象写一行并读/写该行而不是内存。行排序对我来说很重要,因为我将使用行号作为索引。所以我想知道如何在不移动其他行的情况下替换 python 中的行(实际上,移动行是可以的,只要它们返回到我期望的位置)。
编辑
我正在尝试帮助一个朋友,这在 python 中比我差或等于我。该代码应该找到最大的素数,除以给定的非素数。此代码适用于数字,直到数字达到 100 万,但死后,我的记忆力在尝试制作数字列表时耗尽。
# a comes from a user input
primes_upper_limit = (a+1) / 2
counter = 3L
numbers = list()
while counter <= primes_upper_limit:
numbers.append(counter)
counter += 2L
counter=3
i=0
half = (primes_upper_limit + 1) / 2 - 1
root = primes_upper_limit ** 0.5
while counter < root:
if numbers[i]:
j = int((counter*counter - 3) / 2)
numbers[j] = 0
while j < half:
numbers[j] = 0
j += counter
i += 1
counter = 2*i + 3
primes = [2] + [num for num in numbers if num]
for numb in reversed(primes):
if a % numb == 0:
print numb
break
另一个编辑
为每个索引写入不同的文件怎么样?例如十亿个长整数文件名的文件,文件中只有一个数字?
【问题讨论】:
-
让我们解决内存不足的原因:告诉我们计算,还是发布代码?你也可以试试 NumPy。
-
如果您解释您要解决的实际问题,您可能会得到更好的答案。
-
我在原始问题中添加了更多解释和代码。
-
我建议不要将文件系统带入其中。你真的想要十亿个文件吗?会很慢。如果你真的想用磁盘来增加你的内存,你可以制作一个交换文件。
-
您是否需要存储所有质因数的列表,然后选择最大的(如您所做的那样)?还是直接找出最大的质因数?
标签: python stack-overflow sieve-of-eratosthenes prime-factoring