收集起来-列表之列表“分片”,,


  列表“分片”

  还可以使用索引从列表一次获取多个元素,这叫做列表分片(slicing)

  与孩子一起学编程-python教程

  在for循环中的range()类似,分片获取元素时,会从第一个索引开始,不过在达到第二个索引之前停止,正是因为这个原因,前面的例子中我们只取回3项,而不是4项,要记住这一点,一种方法就是牢记取回的项数总是两个索引数之差(4-1=3,所以取回3项。)

  与孩子一起学编程-python教程

  关于列表分片,还有一个重要的问题需要记住,对列表分片时取回的是另一个(通常更小的)列表,这个更小的列表称为原列表的一个分片(slice),原来的列表并没有改变,这个分片是原列表的部分副本(copy)

  下面来看这有什么不同:

  与孩子一起学编程-python教程

  在第一种情况下,我们取回一个元素,在第二种情况下,取回的是包含这个元素的一个列表,这个差别很微妙,但是你必须知道,在第一种情况下,我们使用了一个索引从列表得到一个元素。第二种情况下则是使用分片记法来得到列表的一个单元素分片(只包含一个元素的分片)

  要真正了解二者的区别,可以试试这些命令:

  与孩子一起学编程-python教程

  这里分别显示了两个结果的类型(type),从中可以清楚地看出,前一种情况下得到了一个元素(这里是一个字符串),后一种情况下得到的是一个列表。

  对列表分片时会得到一个较小的列表,这是原列表中元素的一个副本,这说明,可以修改这个分片,而原列表不会受到任何影响。

  分片简写

  使用分片时可以采用一些简写的形式,即使采用这些简写,也不会减少太多的键入。不过程序员总是很懒,所以他们会大量使用简写,我希望你知道这些简写是什么,这样当你在别人的代码中看到这些简写时就能认出来,而且明白是什么意思,这很重要,因为学习新的编程语言时(或者笼统地说,学习编程时),查看并理解其他人的代码是一种很好的方法。

  如果你想要分片包括列表的开始部分,简写方式是使用冒号,后面是想要的元素个数,例如:

  与孩子一起学编程-python教程

  注意,冒号前面没有数字,这样就会得到从列表起始位置开始一直到(但不包括)指定索引之间的所有元素。

  要得到列表末尾也可以用类似的记法。

  与孩子一起学编程-python教程

  使用一个后面跟冒号的数,这样可以得到从指定索引到列表末尾的所有元素。

  如果没有放入任何数,而只有冒号,就可以得到整个列表。

  与孩子一起学编程-python教程

  应该记得吧?我说过分片就是建立原列表的副本,所以letters[:]会建立整个列表的副本,如果你想对列表做些修改,但是同时还想保持原来的列表不做任何改变,使用这种分片就会很方便。

评论关闭