大家好,我是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

最佳答案

如果确实需要使用此大数据集,则应使用pandasnumpy对其进行处理。

但是,如果您想解决编码高尔夫球问题,请尝试使用较小的数据集来测试您的方法。无论如何,您可以考虑使用迭代器代替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])

09-10 05:42
查看更多