我的代码如下,我不能使它为循环。在这段代码中totd_list
是一些随机数的列表。我要计算指数1的平均值,然后是下两个指数的平均值,然后是下三个指数的平均值,然后是下四个指数的平均值。我怎样才能将put-for循环用于获得更体面的结果?你知道吗
avg[0]=totd_list[0]
avg[1]=(totd_list[1]+totd_list[2])/2
avg[2]=(totd_list[3]+totd_list[4]+totd_list[5])/3
avg[3]=(totd_list[6]+totd_list[7]+totd_list[8]+totd_list[9])/4
avg[4]=(totd_list[10]+totd_list[11]+totd_list[12]+totd_list[13]+totd_list[14])/5
首先,我们知道在循环的每次迭代中,我们可能会增加
avg
的索引,对吗?假设我们的索引名为idx
。如果我们继续尝试寻找模式,我们会发现我们总是平均列表中的许多元素,从某个点开始,称之为j
。换句话说所以现在我们必须弄清楚
j
是什么。我们有两个选择。最简单的方法是使用一个名为j
的变量,并在每次迭代结束时将其增量idx + 1
。另一个是注意到上面的意思是j=1+2+...+idx
。有一个著名的公式来计算这类和(还有一个关于高斯的有趣故事),它是idx*(idx+1)/2
。你知道吗剩下两块:
idx
肯定从0
开始)第二个很简单。如果
l
是一个列表l[a:b]
是l[a], l[a+1],..., l[b-1]
,那么我们可以sum(l[j:j+idx+1])
。你知道吗第一个有点难。您可以使用
while
循环并检查idx + j
是否小于列表的长度(即您还有足够的元素),或者您可以计算出每次迭代消耗多少元素(记住,我们知道这是idx
),并使用高斯公式计算出您可以进行多少次迭代。当你还有“多余”的元素时,你必须决定怎么做。你知道吗我把写代码留给你。你知道吗
这是可以理解的,但有点复杂:
代码:
结果:
您可以在这里使用三角形数字,因为您的循环似乎想要切片
[0:1]
、[1:3]
、[3:6]
、[6:10]
、[10:15]
。这些切片的末端与三角形数字1、3、6、10、15匹配。您还可以访问Triangular number以获取有关此模式的更多信息。你知道吗这将允许为列表
[i for i in range(15)]
生成以下切片:然后可以使用上述逻辑计算平均值:
其中给出了列表中的以下平均值:
注意:您需要根据自己的需要调整上述内容,但它应该给出总体思路。你知道吗
相关问题 更多 >
编程相关推荐