如何在移动范围内汇总列表中的元素

2024-05-13 10:09:53 发布

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

我试图从移动范围内的列表中总结元素。例如,当用户输入自定义范围“n”时,列表[0]到列表[n]将相加并存储在新列表中,然后是列表[1]到列表[n+1],直到结束。最后,将打印出新列表中的最大数字。然而,在我的代码中,元素似乎在不断总结。 非常感谢你的帮助

名单如下:

[5.8, 1.2, 5.8, 1.0, 6.9, 0.8, 6.0, 18.4, 18.6, 1.0, 0.8, 6.4, 12.2, 18.2, 1.4, 6.8, 41.8, 3.6, 5.2, 5.2, 4.6, 8.6, 16.6, 13.2, 9.6, 41.6, 37.2, 110.0, 30.0, 34.8, 24.6, 7.0, 13.4, 0.5, 37.0, 18.8, 20.4, 0.6, 6.4, 2.4, 1.0, 7.6, 6.6, 4.4, 2.4, 0.6, 3.2, 21.2, 28.2, 3.2, 2.4, 14.4, 0.6, 1.6, 4.4, 0.8, 0.6, 1.6, 1.0, 27.0, 52.6, 10.2, 1.0, 4.2]

我的代码:

days = int(input('Enter customized range: '))
n = np.arange(days) 
total = 0
count = 1
max_total = []



while (count + len(n) - 2) <= (len(rain_b) - 1):

    for i in range(count+len(n)-4, count+len(n)-2):
        total += rain_c[i]
    #print(rain_b[count+number-1])
    #total = sum([(rain_c(count+number-4)) : (count+number-2)])
        max_total.append(total)
    count += 1
    print(max_total)

Tags: 代码用户元素number列表lencountrange
3条回答

由于您已经在使用numpy,因此可以将np.convolve()与长度为n的数组一起使用:

>>> n = 5
>>> x = np.arange(10)
>>> np.max(np.convolve(x, np.ones(n, dtype=x.dtype), mode="valid"))
35

这具有对数组x的每个n-元素“窗口”执行np.ones(n)的点积的效果。来自numpy.lib.stride_trickssliding_window_view()是类似的,有助于解释:

>>> x
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> windows = np.lib.stride_tricks.sliding_window_view(x, n)
>>> windows
array([[0, 1, 2, 3, 4],
       [1, 2, 3, 4, 5],
       [2, 3, 4, 5, 6],
       [3, 4, 5, 6, 7],
       [4, 5, 6, 7, 8],
       [5, 6, 7, 8, 9]])
>>> windows.sum(axis=1)
array([10, 15, 20, 25, 30, 35])
>>> np.convolve(x, np.ones(n, dtype=x.dtype), mode="valid")
array([10, 15, 20, 25, 30, 35])

试试这个(lst是您的列表,n是您的范围):

print(max(sum(lst[i:i+n+1]) for i in range(len(lst)-n)))

例如:

>>> lst = [5.8, 1.2, 5.8, 1.0, 6.9, 0.8, 6.0, 18.4]
>>> n = 5
>>> print([sum(lst[i:i+n+1]) for i in range(len(lst)-n)])
[21.5, 21.7, 38.9]
>>> print(max(sum(lst[i:i+n+1]) for i in range(len(lst)-n)))
38.9
  1. 我会清理你的循环条件,使之更加清晰和习惯

  2. 我认为问题在于,在迭代之间,您没有将总计归零

  3. 什么是雨b和雨c?应该只有一个输入列表和一个输出列表

  4. 为什么不将n存储为整数而不是某个对象?我的电脑上没有numpy,所以我只是删除了那个部分

以下是我将如何做到这一点的psudo代码:

For x in range 0 up to len(input_list) - n:
     window_total = 0
     for y in range x to x+n-1:
         window_total += input_list[y]
     output_list.append(window_total)

相关问题 更多 >