python - Python 查询中的生成器

标签 python

我试图理解生成器并遇到以下代码:

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/

相关文章:

python - Flask-sqlalchemy - 计算请求 REST 端点(或数据库记录)的次数

python - 是否有不生成 0 的 Python random.random() 模拟

python : comma in print as "\t"

python - BeautifulSoup:查找按名称匹配一个标签或按属性匹配另一标签的任何标签

java - 有人可以帮我解决这个 JAVA SAXParser 吗?

python - Pandas Lookup 将被弃用——优雅高效的替代方案

python - 使用 OpenCV 捕获的显微镜图像的解码问题

python - python查看grpc服务器状态的方法

python - 如何构建支持 Windows 的 python3 的 Neovim?

Python 不识别软链接(soft link)变化