使用嵌套的while循环创建一个sum或powers列表,python

时间:2015-01-30 02:18:41

标签: python while-loop nested

我最近发布了这个,但我仍然没有让它正常工作。这是对我需要的更好的描述: 如果您的基数列表是[1,2,3]并且您的指数列表是[2,4],那么您将返回的列表有两个元素,每个指数一个,并且是:[1 ^ 2 + 2 ^ 2 + 3 ^ 2,1 ^ 4 + 2 ^ 4 + 3 ^ 4]。您的任务是使用嵌套的while循环计算这些元素,并将结果存储在列表中,以便您可以在结尾处返回它。

def sum_of_powers(base_list, expo_list):

    end = []
    j = 0
    i = 0
    while j < len(expo_list):
        sub_accum = []
        while i < len(base_list):
            sub_accum.append(base_list[i]**expo_list[j])
            i += 1
            end.append(sub_accum)
        j += 1

    return end

>>>base_list = [1, 2, 3]
>>>>expo_list = [1, 2]
>>>>print(sum_of_powers(base_list, expo_list))
[[1,2,3],[1,2,3],[1,2,3]]

期望的结果是:     [6,14] 这是(显然) [1 ^ 1 + 2 ^ 1 + 3 ^ 1,1 ^ 2 + 2 ^ 2 + 3 ^ 2]]

我不认为“j”正在被正确添加,我无法弄清楚如何在“sub_accum”中添加元素。我只是想出这个!欢迎任何帮助!谢谢你们!

3 个答案:

答案 0 :(得分:1)

为什么不尝试这个:

def sum_of_powers(base_list, expo_list):
    exp_sum = lambda lst, n: reduce(lambda x,y: x + y**n, lst)
    return [exp_sum(base_list, e) for e in expo_list]

base_list = [1, 2, 3]
expo_list = [1, 2]
print(sum_of_powers(base_list, expo_list))

它更实用,更简单,使用:

  1. list comprehension
  2. mapreduce

答案 1 :(得分:0)

当您将数据放入列表时,

append不会计算数据 因此,您需要添加数据而不是附加数据 并且你没有重新初始化i的值,所以它只运行一次

def sum_of_powers(base_list, expo_list):

        end = []
        sum = 0 #added sum
        j = 0
        i = 0
        k = 0 #added for loop in getting sum

        while j < len(expo_list):
            sum = 0 #re-initialize value to 0 for the next loop
            i = 0 #re-initialize value to 0 for the next loop
            k = 0 #re-initialize value to 0 for the next loop
            sub_accum = []

            while i < len(base_list):
                sub_accum.append(base_list[i]**expo_list[j])
                i += 1

            while k < len(sub_accum): #loop though temporary list to add its values
                sum = sum + sub_accum[k]
                k += 1

            end.append(sum) #end should be at level of 1st layer when all have been calculated and should only insert the sum of 'sub_accum'

            j += 1 

        return end

请在下次使用for循环,这样你就不会忘记重新初始化你的内在价值

答案 2 :(得分:0)

你走了。只需对您当前的代码进行少量修改,即可满足您的需求:

def sum_of_powers(base_list, expo_list):

    end = []
    endsum = []
    j = 0
    while j < len(expo_list):
        sub_accum = []
        i = 0
        while i < len(base_list):
            sub_accum.append(base_list[i]**expo_list[j])
            i += 1
        end.append(sub_accum)
        j += 1

    for i in range(len(end)):
        endsum.append(sum(end[i]))

    return endsum

base_list = [1, 2, 3]
expo_list = [1, 2]
print(sum_of_powers(base_list, expo_list))
[6, 14]

主要内容是i = 0重新初始化和end.append的展示位置。