如何解决如何减少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,99
和k = 100
的答案是18301617063661475246530801328625869309485603831946184570297868634965852237536237409359827175501347520033078455032642163735911784840089970792855267724585385313613694517503049135418557489109958380424745001。{{只需一点数学,我就可以在不到一毫秒的时间内完成计算。
是的,这不能完全回答所问的问题,但是可以解决实际的任务。人们通常在不应该尝试的情况下尝试进行所有排列/组合,这很常见,我认为这是一个有用的答案。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。