如何改进累加器

时间:2017-02-08 14:24:30

标签: function python-3.x

为了改进累加器,我正在编写一个函数来测试我是否正确使用了累加器,但是当我试着编写它时我就卡住了,即使我认为我的其余函数代码很好。

如果您看到奇怪的内容,任何信息都会有用 提前致谢

def gather_every_nth(L, n):
    '''(list, int) -> list

    Return a new list containing every n'th element in L, starting at index 0.

    Precondition: n >= 1

    >>> gather_every_nth([0, 1, 2, 3, 4, 5], 3)

    [0, 3]
    >>> gather_every_nth(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i'], 2)
    ['a', 'c', 'e', 'g', 'i']
    '''

    result = []
    i = 0
    while i < len(L):
       result.append(L[i])
       i = result + result.append(L[i]) # I am not sure about this...

    return result

1 个答案:

答案 0 :(得分:1)

我真的不明白为什么你认为这里有一个累加器:唯一看起来像累加器的东西是result。但通常术语累加器用于递归的上下文中。

这一行:

i = result + result.append(L[i])

显然有问题:i应该是索引,所以int。在这里,您将None(任何.append操作的结果)添加到列表中(?!),您期望结果如何?

解决这个问题的方法很简单:

i = i + n

甚至更短:

i += n

尽管如此,您可以使用 list comprehension 将整个代码缩减为单行

def gather_every_nth(L, n):
    return [L[i] for i in range(0,len(L),n)]