排除基于0的索引中的最后一个元素

时间:2009-12-20 14:31:01

标签: python arrays programming-languages

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

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

不幸的是我没有给它添加书签。有谁知道我在说什么文章?

PS:我欢迎任何解释为何我能立即满意的原因: - )

6 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:5)

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

  1. a[m:n]为您提供了 n - m 元素,可以轻松计算出请求的元素数量。
  2. 使用包含端点,请求空切片(a[3:2]?yuck)很尴尬。
  3. 编辑:我只是想到了另一个特定于Python的原因:[m:-n]排除了第一个 m 和最后 n 项目。如果它是包容性的,它将排除第一个 m 和最后 n -1项,这更难记住。

答案 2 :(得分:3)

答案 3 :(得分:1)

我不知道你指的是哪篇文章,但谷歌搜索half-open ranges应该找到它。它发现this surprisingly good one我认为是个人的最爱。

答案 4 :(得分:1)

据我所知,第一次广泛的印刷处理是在Koenig的伟大着作C Traps and Pitfalls - 20岁,仍在印刷品中(实际上,库存并立即从亚马逊发货! - ),非常赞赏它作为经典的本质。遗憾的是,Google图书中没有可用的预览,虽然构成图书的内部报告的PDF格式可用online,但它显然比书本短得多,特别是它没有提到“开放范围”问题。网络上当然有盗版副本,但我不建议下载这些副本。

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

答案 5 :(得分:0)

不知道任何具体的文章,但我认为理由只是通过这种方式你通过简单的减法得到结果元素的数量,1-0 = 1,而不是必须在那里加1(你会忘记无论如何,有一半的时间。)