我试图理解生成器并遇到以下代码:
def reverse(data):
for index in range(len(data)-1, -1, -1):
yield data[index]
for s in reverse([1,2,3]):
print s
我知道我们从索引 2
开始,减少 1
并结束于-1
。我不明白的是停止点 -1
,我想,应该引用"3"
,但它似乎指的是 "1"
这里? :
3
2
1
谢谢
最佳答案
请参阅https://docs.python.org/2/library/functions.html#range看看范围是如何工作的。我发现阅读文档一开始可能会让人感到困惑,但希望我下面的解释对您的情况有所帮助。
具体来说,上述文档中的这些行回答了您的问题:
' 完整形式返回一个普通整数列表[start, start + step, start + 2 * step, ...]
。如果step为正,则最后一个元素是小于stop的最大start + i * step
;如果step为负数,则最后一个元素是大于stop'
start + i * step
在您的情况下start=2
(len(data)-1),stop =-l和step=-1
。因此,潜在的整数列表将是 [2, 2-1, 2-2*1, 2-3*1 ...]
,即 [2,1,0,- 1 ...]
。但是,由于您的步长为负数,即 -1,因此最后一个元素将比 stop 最小 (start + i*step
)。在潜在列表中,大于 stop(即大于 -1)的最小项为 0。因此 range(len(data)-1, -1, -1)
返回 [2, 1,0]
关于python - Python 查询中的生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26151535/