如何减少itertools.product占用的内存?

问题描述

我正在尝试生成大小为k的一系列数字(a,b)的所有置换,并计算总和为偶数的置换的数量。目前我的代码是

highLow = [int(i) for i in input().split()]
k = int(input())
permutations = list(product(list(range(highLow[0],highLow[1]+1)),repeat=k))
print(len(list(filter(lambda x:sum(x)%2 == 0,permutations))))

但是,这使我超出了内存限制。如何解决此内存问题?

解决方法

product使用O(1)内存;只是您使用list创建一个使用大量内存的所有值的列表

low,high = [int(i) for i in input().split()]
k = int(input())
permutations = product(range(low,high + 1),repeat=k)
n = sum(1 for _ in filter(lambda x: sum(x) % 2 == 0,permutations))
print(n)
,

chepner回答说,product仅使用O(1)内存。您也可以通过根本不使用product来解决product的O( 0 )内存问题。

例如,low,high = 1,99k = 100的答案是18301617063661475246530801328625869309485603831946184570297868634965852237536237409359827175501347520033078455032642163735911784840089970792855267724585385313613694517503049135418557489109958380424745001。{{只需一点数学,我就可以在不到一毫秒的时间内完成计算。

是的,这不能完全回答所问的问题,但是可以解决实际的任务。人们通常在不应该尝试的情况下尝试进行所有排列/组合,这很常见,我认为这是一个有用的答案。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...