【问题标题】:Excluding last element in 0-based indexing排除基于 0 的索引中的最后一个元素
【发布时间】:2010-12-28 12:05:57
【问题描述】:

有一次我在阅读一些 python 文档时看到一篇文章的参考,该文章解释了为什么具有基于 0 的索引的编程语言在切片等操作期间应始终排除最后一个元素:

>> a = [1, 2, 3]
>> a[0:1]
[1]  #and not [1,2]

很遗憾,我没有为它添加书签。有谁知道我说的是哪篇文章?

PS:我欢迎任何解释为什么这是为了我的直接满意:-)

【问题讨论】:

    标签: python arrays programming-languages


    【解决方案1】:

    可能是来自 E. W. Dijkstra 的 this note 吗?

    【讨论】:

    • 刚刚阅读 - 是的,这篇文章很棒 :-) 喜欢他通过排除推导出它的方式。
    【解决方案2】:

    不,但至少有两个很好的理由:

    1. a[m:n] 为您提供 n-m 个元素,让您轻松计算您请求的元素数量。
    2. 使用包容性端点,请求一个空切片很尴尬 (a[3:2]? yuck)。

    编辑: 我刚刚想到了另一个 Python 特有的原因:a[m:-n] 排除了第一个 m 和最后一个 n项目。如果它是包容性的,它将排除第一个 m 和最后 n-1 个项目,这更难记住。

    【讨论】:

    • 另一个原因:a[m:n] + a[n:p] = a[m:p]
    【解决方案3】:

    【讨论】:

      【解决方案4】:

      我不知道您具体指的是哪篇文章,但谷歌搜索 half-open ranges 应该会为您找到。它找到了this surprisingly good one,我认为这是一个新的个人最爱。

      【讨论】:

      • '可惜不是可编辑的文章;内容很好,但演示文稿很草率,有很多特殊的错别字。
      【解决方案5】:

      据我所知,第一次广泛的印刷处理是在 Koenig 的好书C Traps and Pitfalls —— 20 岁,仍在印刷中(实际上,有库存并立即从亚马逊发货!-),相当不错致敬其作为经典的本质。不幸的是,谷歌图书中没有它的预览,虽然构成这本书的内部报告的 PDF 可用online,但它显然比这本书短得多,尤其是它确实更不用说“开放范围”问题了。网络上当然有盗版,但我不建议下载。

      几年前,我总结了 Koenig 的推理 here,并进行了后续讨论 here,但这当然不能替代他书中的完整处理(尽管它可能是一个有用的补充,如特别是第二篇文章,我添加了其他意见,以回应在该线程上发布的批评)。

      【讨论】:

        【解决方案6】:

        不知道任何具体的文章,但我认为理由很简单,这样您可以通过简单的减法 1-0=1 获得结果元素的数量,而不是必须在那里加 1(您会忘记反正一半的时间)。

        【讨论】:

        • 谢谢,但我真的很希望能阅读这篇文章。出于某种奇怪的原因,我只是想读一篇关于这个主题的论文!!! o-x
        猜你喜欢
        • 2013-01-27
        • 1970-01-01
        • 1970-01-01
        • 2016-07-14
        • 2023-01-16
        • 1970-01-01
        • 2015-09-16
        • 2013-07-30
        • 1970-01-01
        相关资源
        最近更新 更多