Python3 数据结构
列表
Python中列表是可变的,这是它区别于字符串和元组的最重要的特点,一句话概括即:列表可以修改,而字符串和元组不能。
列表的基本特点:
- 列表可以包含任意类型的对象:数字、字符串、列表、元组或者其他对象。
- 列表是一个有序序列。与字符串类似,列表中的每一项按照从左到右的顺序,可以通过位置偏移量进行索引和分片。
- 列表是可变的。首先列表的长度可变,即可以添加或删除列表成员。其次列表中的对象可以直接修改。
- 列表存储的是对象的引用,类似于C/C++的指针数组。每个列表成员存储的是对象的引用。而不是对象的本身。
python中列表操作如下表所示:
操作 | 描述 |
---|---|
list.append(x) | 把一个元素添加到列表的结尾,相当于 a[len(a):] = [x]。 |
list.extend(L) | 在列表末尾添加多个对象,参数可谓迭代对象相当于 a[len(a):] = L |
list.insert(i, x) | 在指定位置插入一个元素。第一个参数是准备插入到其前面的那个元素的索引,例如 a.insert(0, x) 会插入到整个列表之前,而 a.insert(len(a), x) 相当于 a.append(x) 。 |
list.remove(x) | 删除列表中值为 x 的第一个元素。如果没有这样的元素,就会返回一个错误。 |
list.pop(i) | 从列表的指定位置删除元素,并将其返回。如果没有指定索引,a.pop()返回最后一个元素。元素随即从列表中被删除。 |
list.clear() | 移除列表中的所有项,等于del a[:]。 |
list.index(x) | 返回列表中第一个值为 x 的元素的索引。如果没有匹配的元素就会返回一个错误。 |
list.count(x) | 返回 x 在列表中出现的次数 |
list.sort() | 对列表中的元素进行排序。若列表对象全部是数字,则按数字从小到大排序;若列表对象全部为字符串,则按字典顺序排序;若包含多种类型,则会出错。 |
list.reverse() | 倒排列表中的元素,即将列表中对象的位置反转 |
list.copy() | 复制列表对象 |
注意:
列表方法使得列表可以很方便的作为一个堆栈来使用,堆栈作为特定的数据结构,最先进入的元素最后一个被释放(后进先出)。用 append() 方法可以把一个元素添加到堆栈顶。用不指定索引的 pop() 方法可以把一个元素从堆栈顶释放出来。也可以把列表当做队列用,只是在队列里第一加入的元素,第一个取出来;但是拿列表用作这样的目的效率不高。在列表的最后添加或者弹出元素速度快,然而在列表里插入或者从头部弹出速度却不快(因为所有其他的元素都得一个一个地移动)。
del 语句
使用 del 语句可以从一个列表中依索引而不是值来删除一个元素。这与使用 pop() 返回一个值不同。可以用 del 语句从列表中删除一个切割,或清空整个列表。例如:
>>> a = [-1, 1, 2, 3,4, 5]
>>> del a[0]
>>> a
[1, 2, 3, 4, 5]
>>> del a[2:4]
>>> a
[1, 2, 5]
>>> del a[:]
>>> a
[]
元组和序列
元组由若干逗号分隔的值组成,元组在输出时总是有括号的,以便于正确表达嵌套结构。在输入时可能有或没有括号, 不过括号通常是必须的。
元组的特点如下:
- 元组可以包含任意类型的对象。
- 元组是有序的。元组中的对象可以通过位置进行索引的分片。
- 元组的大小不能改变,既不能为元组添加对象,也不能删除元组中的对象。
- 元组中的对象也不能改变。
- 与列表类似,元组中存储的是对象的引用,而不是对象本身。
元组的基本操作如下:
操作 | 描述 |
---|---|
(),tuple() | 创建元组 |
len() | 获得元组长度 |
+ | 加法运算可用于合并多个元组。例如(1,2)+(‘ab’) 输出为: (1,2,‘ab’) |
* | 乘法运算可用于合并多个重复的元组,例如:(1,2)*3 输出为:(1,2,1,2,1,2) |
in | in操作符用于判断对象是否属于元组 |
count() | 用于返回指定值在元组中出现的次数 |
index() | 用于在元组中查找指定值 |
>>> t = 1, 5, 'hello!'
>>> t[0]
1
>>> t
(1, 5, 'hello!')
>>> # Tuples may be nested:
... u = t, (1, 2, 3, 4, 5)
>>> u
((1, 5, 'hello!'), (1, 2, 3, 4, 5))
集合
集合是一个无序不重复元素的集。基本功能包括关系测试和消除重复元素。可以用大括号({})创建集合。注意:如果要创建一个空集合,你必须用 set() 而不是 {} ;后者创建一个空的字典。
字典
字典是一种无序的映射的集合,包含一系列的“键:值”对。字典常量用花括号表示。
字典具有以下特点:
- 字典的键通常采用字符串,但也可以用数字、元组等不可变的类型。
- 字典的值可以是任意类型
- 字典也可以称为关联数组或散列表,它通过键映射到值。字典是无序的,它通过键来索引映射的值,而不是通过位置来索引。
- 字典属于可变映射,通过索引来修海键映射的值。
- 字典长度可变,可为字典添加或删除“键:值”对。
- 字典可以任意嵌套,即键映射的值可以是一个字典。
- 字典存储的是对象的引用,而不是对象本身。
理解字典的最佳方式是把它看做无序的键=>值对集合。在同一个字典之内,关键字必须是互不相同。一对大括号创建一个空的字典:{}。或者用dict()创建字典。
字典的基本操作如下:
操作 | 描述 |
---|---|
(),dict() | 创建字典 |
len() | 获得字典长度,即“键:值”对的个数 |
in | in操作符用于判断字典是否包含某个键 |
clear() | 删除全部字典对象 |
copy() | 复制字典对象 |
get(key,[,defauli]) | 返回键key映射的值。如果键key不存在,返回空值。可以用default参数指定不存在的键的返回值 |
pop(key,[,default]) | 从字典中删除键key,并返回映射值,若键不存在,则返回default,未指定default时则会出错 |
popitem() | 从字典删除并返回键值对元组。空字典调用时会产生KeyError错误 |
setdefault(key,[,default]) | 返回映射值或者为字典添加键值对。指定键key在字典中存在时,返回映射值。若键key不存在,则添加“key:default”键值对,省略default时,映射值默认为None。 |
update(other) | 用于为字典添加键值对。参数other可以是另一个字典或者赋值格式表示的元组。若字典已经存在同名的键,则映射值被覆盖。 |
items() | 返回键值对视图 |
keys() | 返回字典中所有键的视图 |
values() | 返回字典中所有值的视图 |