使用嵌套的 while 循环创建求和或幂列表,python
Using nested while loops to create a sum or powers list, python
我最近发布了关于此的帖子,但我仍然无法正常工作。这是对我需要的更好的描述:
如果你的基数列表是 [1, 2, 3] 而你的指数列表是 [2, 4],那么你的列表 return 有两个元素,每个元素一个,是这样的:[1^2 + 2^2 + 3^2、1^4 + 2^4 + 3^4]。你的任务是使用嵌套的 while 循环计算这些元素,并将结果存储在列表中,这样你就可以在最后 return 它。
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" 中的元素。我就是想不通这个!欢迎任何帮助!谢谢大家!
当你把它放在列表中时,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循环,这样你就不会忘记重新初始化你的内部值
给你。只需对当前代码进行少量修改,即可满足您的需求:
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
.
为什么不试试这个:
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))
它更实用也更简单,使用:
- 列表理解
map
和 reduce
我最近发布了关于此的帖子,但我仍然无法正常工作。这是对我需要的更好的描述: 如果你的基数列表是 [1, 2, 3] 而你的指数列表是 [2, 4],那么你的列表 return 有两个元素,每个元素一个,是这样的:[1^2 + 2^2 + 3^2、1^4 + 2^4 + 3^4]。你的任务是使用嵌套的 while 循环计算这些元素,并将结果存储在列表中,这样你就可以在最后 return 它。
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" 中的元素。我就是想不通这个!欢迎任何帮助!谢谢大家!
当你把它放在列表中时,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循环,这样你就不会忘记重新初始化你的内部值
给你。只需对当前代码进行少量修改,即可满足您的需求:
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
.
为什么不试试这个:
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))
它更实用也更简单,使用:
- 列表理解
map
和reduce