第3章 Python的数据类型 第3.1节 功能强大的 Python序列概述
一、概述
序列是Python中最基本的数据结构,C语言中没有这样的数据类型,只有数组有点类似,但序列跟数组差异比较大。
序列的典型特征如下:
- 序列使用索引来获取元素,这种索引方式适用于所有序列;
- 序列中的每个元素都有编号,即其位置或索引,其中第一个元素的索引为0,第二个元素的索引为1,依此类推;
- 序列的访问也可以从最后一个元素开始,它的序号是-1,倒数第二个是-2,依此类推。
Python内置了多种序列,最常用的是三种:字符串、列表和元组。列表和元组很类似,的主要不同在于表是可以修改的,而元组不可以。这意味着列表适用于需要中途添加元素的情形,而元组适用于出于某种考虑需要禁止修改序列的情形。禁止修改序列通常出于技术方面的考虑,与Python的内部工作原理相关,这也是有些内置函数返回元组的原因所在。在你自己编写程序时,几乎在所有情况下都可使用列表来代替元组。一种例外情况是将元组用作字典键,在这种情况下,不能使用列表来代替元组,因为字典键是不允许修改的。
二、序列的操作方法
有几种操作适用于所有序列,包括索引、切片、相加、相乘和成员资格检查。另外,Python还提供了一些内置函数,可用于确定序列的长度以及找出序列中最大和最小的元素。
1、 索引:序列中额每个元素都可以通过索引来访问,使用方法就是:
序列[索引],这里序列包括字符串常值、变量和函数返回值。
如:
‘Hello’[0]的值为’H’,‘Hello’[-1]的值为’o’
如s=’Hello’,s[0]、s[-1]这些访问方式都是可以的
c=input(‘Input your name:’)[0] #取得输入名字的首字符
2、 切片(slicing):就是从序列中连续的切一个片段出来进行访问,也就是访问特定范围内的元素。为此,可使用两个索引,并用冒号分隔。两个索引来指定切片的边界,其中第一个索引指定的元素包含在切片内,但第二个索引指定的元素不包含在切片内。切片有如下使用方法(举例中s=’Hello’):
- 如果第一个索引指定的元素位于第二个索引指定的元素后面,结果就为空序列。注意这里是指元素后面是指元素在序列中的位置的后面,并不一定是后一个索引值小于前一个的索引值。如s[3:2]为空字符串’’,s[1:3]为字符串’el’,s[1:-1]= ‘ell’;
- 如果切片始于序列开头,可省略第一个索引。如果切片结束于序列末尾,可省略第二个索引。如s[:2]=’He’,s[1:]=’ello’
- 执行切片操作时,还可以指定另一个参数:步长,步长和两个索引之间用冒号分隔。在普通切片中,步长为1。如果指定的步长大于1,将跳过一些元素。例如,步长为2时,将从起点和终点之间每隔一个元素提取一个元素。步长可以为负数,即从右向左提取元素. 当省略起始和结束索引时,步长为正数时,它从起点移到终点,而步长为负数时,它从终点移到起点。如s[::2]为’Hlo’,s[::-1]为’olleH’;
- 使用切片赋值还可在不替换原有元素的情况下插入新元素,方法就是在要插入的索引位置n指定该切片起始都为n的切片等于要插入的新序列。由于字符串、元组都是不可修改的,因此相关例子到列表介绍时来说明。
3、 拼接:可使用加法运算符来拼接相同类型的序列,一般而言,不能拼接不同类型的序列,如不能拼接列表和字符串,虽然它们都是序列。如s2=s+’,world!’,s2的值就是’Hello,world!’;
4、 相乘:将序列与数x相乘时,将重复这个序列x次来创建一个新序列。如s1=s2*2,则s1的值是’ Hello,world!Hello,world!’
5、 函数len、min和max,len返回序列包含的元素个数,而min和max分别返回序列中最小和最大的元素。如len(s)值为5,min(s)的值为’H’,max(s)的值为’o’
6、 index方法:方法index在列表中查找指定值第一次出现的索引,如s.index(‘l’)返回2。
本节介绍了序列的基本概念,并以字符串为例简单说明了序列的特点和操作方法。由于字符串是不能修改的序列,因此部分序列的操作方法无法在此介绍,后续在进行列表的相关内容介绍时再补充相关内容。