如何为给定列表设置循环?

2024-04-25 07:09:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我的代码如下,我不能使它为循环。在这段代码中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

Tags: 代码列表forput指数listavg平均值
3条回答

首先,我们知道在循环的每次迭代中,我们可能会增加avg的索引,对吗?假设我们的索引名为idx。如果我们继续尝试寻找模式,我们会发现我们总是平均列表中的许多元素,从某个点开始,称之为j。换句话说

avg[idx] = (totd_list[j] + ... + totd_list[j+idx]) / (idx+1)

所以现在我们必须弄清楚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),并使用高斯公式计算出您可以进行多少次迭代。当你还有“多余”的元素时,你必须决定怎么做。你知道吗

我把写代码留给你。你知道吗

这是可以理解的,但有点复杂:

代码:

totd_list = [2] * 15
an_iter = iter(totd_list)

sums = [sum((next(an_iter) for j in range(i+1))) for i in range(5)]
print(sums)

avg = [s / (i+1) for i, s in enumerate(sums)]
print(avg)

结果:

[2, 4, 6, 8, 10]
[2, 2, 2, 2, 2]

您可以在这里使用三角形数字,因为您的循环似乎想要切片[0:1][1:3][3:6][6:10]、[10:15]。这些切片的末端与三角形数字1、3、6、10、15匹配。您还可以访问Triangular number以获取有关此模式的更多信息。你知道吗

这将允许为列表[i for i in range(15)]生成以下切片:

[0]
[1, 2]
[3, 4, 5]
[6, 7, 8, 9]
[10, 11, 12, 13, 14]

然后可以使用上述逻辑计算平均值:

lst = [i for i in range(15)]
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]

# hard coded value, adapt it to something else
n = 5

avg = []

start = 0

# Loop n iterations
for i in range(1, n + 1):

   # Get the triangle number
    end = (i ** 2 + i) // 2

    # Slice your list
    seq = lst[start:end]

    # Compute average and add it to list
    avg.append(sum(seq)/i)

    # Reset start index to end
    start = end

print(avg)

其中给出了列表中的以下平均值:

[0.0, 1.5, 4.0, 7.5, 12.0]

注意:您需要根据自己的需要调整上述内容,但它应该给出总体思路。你知道吗

相关问题 更多 >