大家好,我是python.i的新手,正试图从在线编码站点解决此问题
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 ^ 9th个元素执行此操作时,会遇到内存错误。
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行,在
array3 = array1 + array2
MemoryError
最佳答案
如果确实需要使用此大数据集,则应使用pandas或numpy对其进行处理。
但是,如果您想解决编码高尔夫球问题,请尝试使用较小的数据集来测试您的方法。无论如何,您可以考虑使用迭代器代替list,并使用iterator.chain加入迭代器。
from itertools import chain
A=int(input())
B=int(input())
N=int(input())
array_a = (i*A for i in range(10**4))
array_b = (i*B for i in range(10**4))
array_c = chain(array_a, array_b)
c = sorted(set(array_c))
print(c[N])