2015-01-30 8 views
-1

Я недавно опубликовал об этом раньше, но я все еще не получаю его работу должным образом. Вот лучшее описание того, что мне нужно: Если ваш список баз [1, 2, 3], а список экспонентов - [2, 4], тогда список, в который вы вернётесь, имеет два элемента: по одному для каждого показателя и это: [1^2 + 2^2 + 3^2, 1^4 + 2^4 + 3^4]. Ваша задача - рассчитать эти элементы с помощью вложенных циклов и сохранить результаты в списке, чтобы вы могли вернуть их в конце.Использование вложенных циклов для создания суммы или списка полномочий, python

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». Я просто не могу это понять! Любая помощь приветствуется! Спасибо, парни!

+0

ERM, '[ 6, 27] '? Как? –

+0

@GamesBrainiac Ха-ха, о, с моей стороны. [6, 14]. Хорошо, что я сказал «очевидно» правильно !? haha –

+0

Не нужно ли возвращать '[3, 14]'? В принципе, если вы вводите аргументы '[1,2], [1,2,3]', то вы должны получить '[1 + 1+ 1, 2 + 4 + 8]'? –

ответ

0

Append не вычисляет данные, когда вы поместите его в список , таким образом, вам нужно добавить данные вместо добавления его и вы не повторно инициализировать значение из я так он работает только через один раз

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 

, пожалуйста, используйте для петель в следующий раз, так что вы не будете забывать повторно инициализировать свои внутренние значения

+0

Проверьте мой, а также немного больше похожий на ваш оригинальный код. –

+0

@felicia рад, что я помог .. Пожалуйста, проанализируйте правильно, чтобы избежать путаницы в будущем и не забывайте повторно инициализировать значения в циклах. –

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.

+0

делает это, если в expo_list содержится более двух элементов? –

+0

@Kyle, вы не должны делать [sum (end [0]), sum (end [1])], поскольку это ограничивает только два показателя. Что, если в списке экспонирования содержится больше значений, то два? .. хотя бы сделать цикл чтобы вернуться концом динамически –

+0

@felicia_rae Приношу свои извинения, сейчас. –

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. список понимание
  2. map и reduce
+0

Было необходимо использовать вложенные петли для какой-то ужасной причины! Но спасибо! –

+0

@felica_rae, так как @francis решил вашу проблему. Я дам вам несколько советов по стилю: избегайте 'while j cizixs

Смежные вопросы