为了改进累加器,我正在编写一个函数来测试我是否正确使用了累加器,但是当我试着编写它时我就卡住了,即使我认为我的其余函数代码很好。
如果您看到奇怪的内容,任何信息都会有用 提前致谢
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
答案 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)]