嵌套列表的内存消耗

时间:2019-07-01 23:22:18

标签: python-3.x optimization

因此,我是python的新手,遇到了一个有趣的主题:智能子集计数。 “智能集”是一组非负整数,其中最大的数字是剩余数字的总和。例如,{1,3,4}很聪明,因为1 + 3 = 4。 我编写了一个程序,以查找给定的一组非负(唯一)整数的所有智能子集,并返回它们数量的计数。 例如,对于集合{1,2,3,4,6},结果为1 + 2 = 3、1 + 3 = 4、2 + 4 = 6和1 + 2 + 3 = 6,因此子集计数为4。 对于用户提供的大多数输入,它完全可以正常工作,但是当我尝试将其应用于素数时会出现问题。就像应用于前19个素数一样,它大约需要10秒钟。但是,当我尝试使用更多的素数时,它会消耗过多的内存(超过25GB),并且执行失败并显示“内存错误”。 有没有一种方法可以优化代码?

预先感谢:) 干杯!

我已经“优化”了代码,显然没有用。

def funcy(list):
def powerset(s):
    x = len(s)
    a=[]
    for i in range(1,1 << x):
        a.append(([s[j] for j in range(x) if (i & (1 << j))]))
    return a

l=powerset(list)
print("The power sets of the given list are: ",l)
print("\n\n")

def apps(l2):  
    ll=[]
    for x in l2:
        if len(x)>=3:
            ll.append(x)
    print("The Candidates for Smart Sets are:",ll)
    print("\n\n")
apps(l)

def SS(ll1):
    finallist=[]

    for ele1 in ll1:
        sum = 0
        for num in ele1:
            sum += int (num)
            ma=int(max(ele1))
        if (ma==(sum-ma)):
            #print(ele1)
            finallist.append(ele1)

    print ("The number of Smart Sets in the List is: ", len(finallist))
    print ("\nThe Smart sets are:", finallist)

SS(l)

我的原始代码是否结合了质数计算器功能(质数计算器没有问题,因为即使计算约300个质数也要花费大约2秒钟的时间)

我稍后将上述代码“优化”为

def powerset(s):
    fl=[]
    x = len(s)
    a=[]
    for i in range(1,1 << x):
        a.append(([s[j] for j in range(x) if (i & (1 << j))]))
    if len(a)>=3:
        for ele1 in a:
            sum=0
            for num in ele1:
                sum += int (num)
                ma=int(max(ele1))
            if (ma==(sum-ma)):
                fl.append(ele1)

    print ("\nThe number of Smart Sets in the List is: ", len(fl))
    print ("\nThe Smart sets are:", fl)

但是以大约100个素数作为输入运行它仍然会遇到内存错误。

帮助!

0 个答案:

没有答案