【发布时间】:2014-09-29 10:29:29
【问题描述】:
大家好,我对 python 很陌生。我试图从一个在线编码网站解决这个问题
A=3,B=5
A = 3 , 6 , 9 , 12 ,15 ,18 等的表
B = 5 , 10 , 15 , 20 等的表
合并后:3、5、6、9、10、12、15、15、18、20等
删除重复项:3、5、6、9、10、12、15、18、20 等
对于 N= 2 ,超表的第二个元素是 5
问题是我可以得到有限范围的 A 和 B 的答案,但是当我为第 10^9 个元素这样做时,我得到了一个内存错误。
from array import *
import itertools
array1=[]
array2=[]
A=int(input())
B=int(input())
N=int(input())
for i in range(0,10**9):
try:
array1.append(i+1 * A)
except MemoryError :
break
for j in range(0,10**9):
try:
array2.append(j+1 * B)
except MemoryError :
break
filter(None ,array1)
filter(None ,array2)
array3 = array1 + array2
array3 = sorted(set(array3))
print (array3[N])
回溯(最近一次通话最后一次):
文件“C:/Users/Clinton D/Desktop/supertables.py”,第 21 行,在
数组 3 = 数组 1 + 数组 2
内存错误
【问题讨论】:
-
对于初学者,请尝试
xrange...您正在制作一些大名单。 -
range是 python 3 中的迭代器。 -
当你只处理普通列表而没有数组时,为什么要从数组模块中导入 *? (或 itertools,就此而言,当你不使用它时?)
-
太酷了。这是一个很好的决定。在这种情况下,只是您正在处理大量列表。
-
您正在获得内存开销..
10**9 x intsize,有关更多信息,请参阅其他答案:stackoverflow.com/a/14329864/764322
标签: python memory out-of-memory