我应该如何减少具有重复数字的大型笛卡尔乘积的内存使用量



在Python3中,给定一个数字列表[1,1,2,3],我将返回所有具有重复数字的排列,直到一定长度的数字。所以我们会说x=3,这意味着结果是1.11111112113。。3.33312321333

我把它简化为列表理解,希望它能解决我的内存消耗问题,但我没有看到显著的增长。

我可以做些什么来减少大输入列表(比如9个元素(所需的内存?

return sum(sum(1 for _set in product(digits, repeat=i) if int(''.join(_set)) <= n) for i in range(1, len(str(n)) + 1))

python int的大小相当于一个long,在数组中可以使用常规的int

from array import array
import sys
a = [] #regular list
b = array('I') # int
c = array('B') # short, probably cant take too long numbers
for i in range(100):
a.append(i)
b.append(i)
c.append(i)

#>>> sys.getsizeof(a)
#5496
#>>> sys.getsizeof(b)
#2592
#>>> sys.getsizeof(c)
#696

最新更新