【问题标题】:Taking the sum of a sliding window of indices in python取python中索引滑动窗口的总和
【发布时间】:2012-07-11 20:55:46
【问题描述】:

我环顾四周,但无法找出我的代码失败的原因,以及如何正确地做到这一点。我是编码新手(3 天),所以请原谅我的笨拙。

我从一个整数列表开始,本质上我想创建一个新列表或更新列表,其中新列表的第一个索引的值 = 原始列表的前 10 个值的总和 (0-10),并且那么新列表的第二个索引的值 = 原始列表 (1-11) 索引值的总和。

问题在于它错误地添加了所有内容,而且我还无法弄清楚模式。

这是我所拥有的:

def sum_range(filename, grouping = 10):
    """sums up the ss values for 'groupings' numbers of indices.
    Shows ALL results, regardless of how high or low strandedness is"""

    sslist = ssc_only(filename)
    # "ssc_only(filename)" takes my input and returns it as a list of int,
    # which I want to use for this function

    sslist = [sum(sslist[i:i+grouping]) for i in sslist]

    return sslist

【问题讨论】:

    标签: python list int sum sliding-window


    【解决方案1】:

    我认为您可能想要for i in range(len(sslist))(如果您担心内存消耗,请在 python 2 中使用 xrange 而不是 range)。

    lstlen=len(sslist)
    sslist = [sum(sslist[i:min(i+grouping,lstlen)]) for i in range(lstlen)]
    

    您正在循环列表 items 而不是列表 indices

    当然,最后 10 个元素是少于 10 个元素的总和。因为我不知道你想对这些元素做什么,所以我会让你弄清楚你想对它们做什么。

    【讨论】:

    • 非常感谢!这对我的程序很有用,它还帮助我上了一堂非常重要的课(关于我正在循环的内容)。它工作得很好,而且对于我使用它的目的,我最终会丢失一些元素并不重要。最好的!
    【解决方案2】:

    不要认为你的求和是正确的......如果你以 10 个为一组,你会得到比原始列表中少 10 个样本 - 这在下面的表达式中给出 len(r) - 10

    >>> r = range(20)
    >>> r
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
    >>> [sum(r[n:10+n]) for n in range(len(r)-10)]
    [45, 55, 65, 75, 85, 95, 105, 115, 125, 135]
    

    【讨论】:

    • 谢谢,我确实有求和错误,需要使用 len() 函数。
    猜你喜欢
    • 2021-09-01
    • 2016-03-06
    • 2021-12-17
    • 2013-04-05
    • 1970-01-01
    • 2021-06-14
    • 1970-01-01
    • 2012-02-09
    • 2012-05-16
    相关资源
    最近更新 更多