这是我的代码。挑战是取一串数字,得到它们的组合,并取每个组合的平均值。然后,对每一个它们计算大于或等于极限(k(的平均值。
我现在的问题是我的代码没有通过256MB的内存限制。
有什么技巧可以优化这个代码以使用更少的内存吗?
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))
请参阅此以获取有关问题的更多信息+示例
请参阅此图像以获取输入格式
函数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提供的建议。