0

我环顾四周,但无法找出我的代码失败的原因,以及如何正确地做到这一点。我是编码新手(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
4

2 回答 2

3

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

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

您正在循环列表而不是列表索引

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

于 2012-07-11T20:59:09.670 回答
0

不要认为你的求和是正确的......如果你以 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]
于 2012-07-11T21:06:45.020 回答