首页 > 解决方案 > 有没有办法为我的挑战减少这个 Python 代码的内存?

问题描述

这是我的代码。挑战是取一串数字并得到它们的组合,然后取每个组合的平均值。然后对于每个它们,计算大于或等于限制 (k) 的平均值。

我现在的问题是我的代码没有超过 256 MB 的内存限制。

是否有任何提示可以优化此代码以使用更少的内存?

from itertools import combinations
 
k = input().split(" ")[1]
nums_arr = list(map(int, input().split()))
 
def combs(x):
  return [c for i in range(len(x)+1) for c in combinations(x,i)][1:]
 
def avg(x):
  return map(lambda x: sum(x)/len(x), combs(nums_arr))
 
def condition(arr):
  return sum(map(lambda x : x >= int(k), avg(nums_arr)))
 
print(condition(nums_arr))

有关问题 + 示例的更多信息,
请参阅此图像请参阅此图像以了解输入格式

标签: pythonalgorithmoptimizationmemory

解决方案


函数combs应重写为以下等效的生成器函数:

def combs(arr):
    first_time = True
    for i in range(len(arr)+1):
        for c in combinations(arr, i):
            if first_time:
                first_time = False
                continue
            yield c

您还应该采纳@quamrana 提供的建议。


推荐阅读