序列类型

阅读 72

序列类型,可以简单理解为容纳多个元素,并且按照顺序排列元素的类型。常见的有列表(list)和元组(tuple)。

列表 list

list 是一个有序的容器,可以添加,删除容器中的元素。而且元素不要求是同一类型。列表类型用中括号表示。

>>> a
>>> a
[]
>>> type(a)
<class 'list'>
>>> b = []
>>> b
[]
>>> type(b)
<class 'list'>

比如上课进入教室的学生,可以按照顺序添加到一个列表中。

>>> students = ['xiaoming', 'xiaoli', 'hanmeimei']
>>> students
['xiaoming', 'xiaoli', 'hanmeimei']

列表中的元素可以使用索引号来获取,和 str 类型一样。

>>> students = ['xiaoming', 'xiaoli', 'hanmeimei']
>>> students[0]
'xiaoming'
>>> students[1]
'xiaoli'
>>> students[2]
'hanmeimei'
>>> students[-1]
'hanmeimei'
>>> students[-2]
'xiaoli'

切片操作也是一样的,返回一个新的 list。

>>> students[:2]
['xiaoming', 'xiaoli']
>>> students[::2]
['xiaoming', 'hanmeimei']

如果要判断元素是否存在,可以直接使用 in 操作,返回一个 bool 值。

>>> students = ['xiaoming', 'xiaoli', 'hanmeimei']
>>> 'xiaoming' in students
True
>>> 'ahua' in students
False

如果要判断元素是否不在列表中,推荐使用 not in 操作,虽然可以使用 in 操作返回值取反,但是使用 not in 执行效率更高一些。

>>> 'xiaoming' not in students
False
>>> 'ahua' not in students
True
>>> not 'ahua' in students
True

列表中增加元素,最常用的是使用 append 方法。对于列表 a,新增一个元素'xiaoming',直接调用 a.append('xiaoming') 即可。

>>> a = []
>>> a.append('xiaoming')
>>> a
['xiaoming']

对于两个列表合并,可以直接使用 + 操作,返回一个新的列表。可以使用 extend 方法,把一个列表的元素添加到另一个列表中。两者的区别是,会不会返回一个新的列表。

>>> a = [1,2]
>>> b = [3,4]
>>> a + b
[1, 2, 3, 4]
>>> a.extend(b)
>>> a
[1, 2, 3, 4]

Python 内置了 len 函数,可以用来计算列表的长度。对于能够比较大小的类型,max 计算最大值,min 计算最小值。并不是只有数字能比较大小,只要实现了比较运算的类型都能比较。

>>> len(students)
3
>>> max(students)
'xiaoming'
>>> min(students)
'hanmeimei'

Python 内置了很多列表的操作。

名称说明
append增加一个元素
clear清空元素
count元素在列表中出现的次数
extend合并新的列表
index元素在列表中首次出现的索引号
insert在指定位置插入新的元素
pop在指定位置弹出(删除并返回)一个元素,默认是最后一个元素
remove删除指定元素,如果不存在就跑出异常
reverse元素顺序反转
sort列表元素排序
>>> students = ['xiaoming', 'xiaoli', 'hanmeimei']
>>> students.append('lilei')
>>> students
['xiaoming', 'xiaoli', 'hanmeimei', 'lilei']
>>> students.clear()
>>> students
[]
>>> students = ['xiaoming', 'xiaoli', 'hanmeimei']
>>> students.count('xiaoli')
1
>>> students.extend(['huahua', 'lilei'])
>>> students
['xiaoming', 'xiaoli', 'hanmeimei', 'huahua', 'lilei']
>>> students.index('huahua')
3
>>> students.insert(0, 'xiaokai')
>>> students
['xiaokai', 'xiaoming', 'xiaoli', 'hanmeimei', 'huahua', 'lilei']
>>> students.pop()
'lilei'
>>> students
['xiaokai', 'xiaoming', 'xiaoli', 'hanmeimei', 'huahua']
>>> students.remove('huahua')
>>> students
['xiaokai', 'xiaoming', 'xiaoli', 'hanmeimei']
>>> students.reverse()
>>> students
['hanmeimei', 'xiaoli', 'xiaoming', 'xiaokai']
>>> students.sort()
>>> students
['hanmeimei', 'xiaokai', 'xiaoli', 'xiaoming']

元组 tuple

是“元组”,元素组合,不是“元祖”。

元组是和 list 相似的数据类型,都能按照顺序保存元素,按照索引号获取元素。但是元组是不可变的,一旦创建就不能新增,修改,删除元素。

和 list 一样,有两种方法创建元组类型,一个是直接使用名称,一个是使用小括号。

>>> a = tuple()
>>> type(a)
<class 'tuple'>
>>> b = ()
>>> type(b)
<class 'tuple'>

注意如果只包含一个元素,需要在元素的后面添加一个逗号。因为 Python 默认形如 (a) 的格式,表示元素本身。应该使用 (a,) 的格式。

>>> a = (1)
>>> type(a)
<class 'int'>
>>> a = (1,)
>>> type(a)
<class 'tuple'>

注意不可修改。

>>> a = (1,2,3)
>>> a
(1, 2, 3)
>>> a[0] = 4
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment

其他方法是以一样的,按索引号获取元素,判断是否存在,计算元组长度,计算最大值最小值等。

小结

list 和 tuple 都是 Python 内置的有序集合,主要区别是一个可变,一个不可变。很多操作都是通用的,不仅仅是对于列表和元组,比如 in 也可以与字符串,判断字符串是否存在。这也是 Python 简单易学的一个重要原因。