我的下面的代码使用about(30000输入元素)使用超过300000 KB并且每个内存使用量有限制(256 MB),所以有什么方法可以优化它吗?
import itertools
def get_subsets(arr,m) :
return list(itertools.combinations(arr,m))
def _9(string) :
count =0
for i in range(len(string)-1 , -1 ,-1) :
if string[i] != '9' :
break
count += 1
return count
if __name__ == "__main__" :
length = int(input())
arr = [int(x) for x in input().strip().split()]
pairs = get_subsets(arr,2)
max_9 = [_9(str(x[0]+x[1])) for x in pairs]
max_9_0 = max(max_9)
print(max_9_0,max_9.count(max_9_0))
问题是: 让我们将价格的质量定义为其末尾的9个数(最右边的数字等于9)。例如,数字2999和123912391999的质量均为3,而数字952的质量为0。
有n种产品的价格分别为t1,t2,...,tn。
您将准确购买两种产品(它们必须不同)。请查看两种产品的总价格的最高质量。此外,找到选择两种不同产品的方法的数量,并获得总价格的最大可能质量。
答案 0 :(得分:1)
一种方法可能是使用列表而不是使用列表。使用发电机。它们也是可迭代的。请参阅:http://letstalkdata.com/2015/05/how-to-use-python-generators-to-save-memory/