#一、 什么是数据结构
在计算机科学中,数据结构(英语:data structure)是计算机中存储、组织数据的方式。
###1. Python 中核心数据结构分类
- 序列类型: 字符串、列表、元组
- 映射类型: 字典
- 集合: set()
在 Python中列表、元组、字典、集合都称为容器。
###2. 序列类型数据结构共有的特点:
序列类型中的元素都有对应的位置,这个位置叫偏移量或者索引
偏移量(索引) | 0 | 1 | 2 | 3 | 4 | N-1 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
偏移量(索引) | -N | -N(N-1) | -4 | -3 | -2 | -1 |
#二、列表
###1. 列表的特性介绍
- #####列表内的元素是可变的。
列表的元素可以是 Python 的任何类型的数据和对象
如:字符串、列表、元组、字典、集合、函数、类- #####列表中的具有相同值的元素允许出现多次
如:[1, 2, 1, 1, 1, 1, 3, 3, 2]
###2. 创建列表
# 推荐使用 [] 高效
例:
>>> li = []
>>> cc = [ 'chen', 'chao' ]
# 从其他类型转换 list()
>>> list('hello ')
['h', 'e', 'l', 'l', 'o', ' ']
# 从字符串转换 split()
>>> 'c.h.e.n'.split('.')
['c', 'h', 'e', 'n']
#####嵌套的列表
列表中可包含 python 中任何类型的元素(对象),当然也可以包括一个或多个列表
li = [['one', 'two', 'three'], [1, 2, 3]]
###3. 列表的基本操作
#####3.1 取值
没有嵌套的列表取值
>>> li = ['one', 'two', 'three']
>>> li[0]
'one'
>>>
嵌套的列表取值
>>> li = [['one', 'two', 'three'], [1, 2, 3]]
>>> li[0][2]
'three'
>>>
#####3.2 切片
同字符串的切片一样,详情参考字符串教程中的切片
简单示例:
>>> li_f = [ 'insert', 'append','extend', 'remove', 'pop', 'sort', 'sorted']
# 获取全部元素
>>> li_f[:]
['insert', 'append', 'extend', 'remove', 'pop', 'sort', 'sorted']
# 反转
>>> li_f[::-1]
['sorted', 'sort', 'pop', 'remove', 'extend', 'append', 'insert']
>>>
#####3.3 必会方法
len()
方法是一个内置函数,可以统计序列类型的数据结构的长度。
>>> li = [5, 4, 3, 2, 1, 0]
>>> n = len(li)
>>> print(n)
6
in
判断元素是否存在于列表中。
>>> li = ['chen', 123, '456']
>>> '456' in li
True
>>> 456 in li
False
>>> if 'chen' in li:
... print('presence')
...
presence
append()
向列表的最后位置,添加一个元素,只接收一个参数。
>>> li = ['chen', 123, '456']
>>> li.append(789)
>>> li
['chen', 123, '456', 789]
insert()
向原列表的指定位置插入一个元素,接收两个参数,第一个是索引号,第二个是要插入的元素。
>>> li = ['chen', 123, '456']
>>> li.insert(1, 'chao')
>>> li
['chen', 'chao', 123, '456']
>>> li.insert(-1, 789)
>>> li
['chen', 'chao', 123, 789, '456']
extend()
可以把一个序列类型中的每个元素追加到原列表中,接收的参数是一个序列类型的数据(字符串,列表)。
>>> li1 = ['chen', 'chao']
>>> li2 = [123, 'test', '456', 789]
>>> li1.extend(li2)
>>> li1
['chen', 'chao', 123, 'test', '456', 789]
>>> li2
[123, 'test', '456', 789]
>>>
remove()
移除列表中某个指定的元素,没有返回值,并且假如有多个相同值的元素存在,每次只会移除排在最前面的那个元素
>>> li = [123, 123, 456, '123']
>>> li.remove(123)
>>> li
[123, 456, '123']
>>> li.remove('123')
>>> li
[123, 456]
pop()
从原列表中删除一个元素,并且把这个元素返回。接收零个或一个参数,参数是偏移量,int 类型。
>>> li = [123, 456, 789, '123']
# 删除列表的最后一个元素
>>> li1 = li.pop()
>>> li1
'123'
>>> li
[123, 456, 789]
# 删除列表的倒数第二个元素
>>> li2 = li.pop(-2)
>>> li2
456
>>> li
[123, 789]
- 循环列表
>>> li = [123, 456, 789, '123']
>>> for i in li:
... print(i)
...
123
456
789
123
#三、元组
###1 元组特性介绍
- 元组和列表一样,也是一种序列。
- 唯一的不同是,元组是相对不可变的
###2 高效创建元组
t1 = ()
创建 空 元素的元组 t1
创建非空元素的元组是用逗号,而不是用小括号
>>> t1 = (3)
>>> t2 = 3,
>>> type(t1)
<class 'int'>
>>> type(t2)
<class 'tuple'>
tuple()
可以对其他序列类型的数据转换为元组。
>>> c = 'chen'
>>> n = [1, 2, 3]
>>> tuple(c)
('c', 'h', 'e', 'n')
>>> tuple(n)
(1, 2, 3)
>>> t1 = [1, 2, 3, ['a', 'b']]
>>> tuple(t1)
(1, 2, 3, ['a', 'b'])
更改元组数值
>>> t1 = (1, 2, 3, ['a', 'b'])
>>> t1[3][0]=0
>>> t1
(1, 2, 3, [0, 'b'])
###3. 循环元组
>>> t = ('chen', 123, 456)
>>> for i in t:
... print(i)
...
chen
123
456
###4. 使用元组的理由
- 占用内存空间小
- 元组内的值不会被意外的修改
- 可作为字典的键
- 函数的参数是以元组形式传递的
- 命名元组有时候可以代替类的对象(面向对象的时候讲)