流畅的 Python(22):序列构成的数组 2.4&2.4.1

阅读数:9 2019 年 11 月 20 日 17:11

流畅的Python(22):序列构成的数组 2.4&2.4.1

内容简介
本书致力于帮助 Python 开发人员挖掘这门语言及相关程序库的优秀特性,避免重复劳动,同时写出简洁、流畅、易读、易维护,并且具有地道 Python 风格的代码。本书尤其深入探讨了 Python 语言的高级用法,涵盖数据结构、Python 风格的对象、并行与并发,以及元编程等不同的方面。

(切片)

在 Python 里,像列表(list)、元组(tuple)和字符串(str)这类序列类型都支持切片操作,但是实际上切片操作比人们所想象的要强大很多。

这一节主要讨论的是这些高级切片形式的用法,它们的实现方法则会在第 10 章的一个自定义类里提到。这么做主要是为了符合这本书的哲学:先讲用法,第四部分中再来讲如何创建新类。


(为什么切片和区间会忽略最后一个元素)

在切片和区间操作里不包含区间范围的最后一个元素是 Python 的风格,这个习惯符合 Python、C 和其他语言里以 0 作为起始下标的传统。这样做带来的好处如下。

  • 当只有最后一个位置信息时,我们也可以快速看出切片和区间里有几个元素:range(3)my_list[:3] 都返回 3 个元素。
  • 当起止位置信息都可见时,我们可以快速计算出切片和区间的长度,用后一个数减去第一个下标(stop - start)即可。
  • 这样做也让我们可以利用任意一个下标来把序列分割成不重叠的两部分,只要写成 my_list[:x]my_list[x:] 就可以了,如下所示。
复制代码
<pre>
>>> l = [10, 20, 30, 40, 50, 60]
>>> l[:2] # 在下标 2 的地方分割
[10, 20]
>>> l[2:]
[30, 40, 50, 60]
>>> l[:3] # 在下标 3 的地方分割
[10, 20, 30]
>>> l[3:]
[40, 50, 60]
</pre>

计算机科学家 Edsger W. Dijkstar 对这一风格的解释应该是最好的,详见“延伸阅读”中给出的最后一个参考资料。

接下来进一步看看 Python 解释器是如何理解切片操作的。

流畅的Python(22):序列构成的数组 2.4&2.4.1

图灵地址 https://www.ituring.com.cn/book/1564

评论

发布