我如何为这个给定的列表提供循环?

时间:2018-02-24 01:16:16

标签: python list loops for-loop list-comprehension

我的代码如下所示,我无法进行循环。在此代码中totd_list是一些随机数的列表。我想平均指数1,然后是下两个指数的平均值,然后是接下来的三个指数的平均值,然后是接下来的4个指数的平均值。我如何设置一个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

1 个答案:

答案 0 :(得分:0)

您可以在此处使用三角形数字,因为您的循环似乎要切片[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]

注意:您需要针对您的需求调整上述内容,但它应该提供一般性的想法。