一、 什么是数据结构
在计算机科学中,数据结构(英语:data structure)是计算机中存储、组织数据的方式
- Python 中核心数据结构分类
序列类型: 字符串、列表、元组
映射类型: 字典
集合: set()
在 Python中列表、元组、字典、集合都称为容器。
序列类型中的元素都有对应的位置,这个位置叫偏移量或者索引
二、列表
1 列表内的元素是可变的。列表的元素可以是 Python 的任何类型的数据和对象
列表中的具有相同值的元素允许出现多次
>>> a
[3, 5, 1, 9, 2, 3, 7, 'qw', 1]
>>> type(a)
<class 'list'
In [2]: a = [1, 1, 2, 34, 'rwer', 'rwer']
In [3]: a
Out[3]: [1, 1, 2, 34, 'rwer', 'rwer']
2 创建列表
In [8]: nn = []
In [9]: n1 = [1, 2, 'wefw']
In [10]: n1
Out[10]: [1, 2, 'wefw']
In [11]: n = 'hello'
In [12]: list(n) list() 从其他类型转换
Out[12]: ['h', 'e', 'l', 'l', 'o']
In [13]list('hello')
Out[14]: ['h', 'e', 'l', 'l', 'o']
In [17]: '123.rwqr.343'.split('.') split() 默认以空格为分隔符
Out[17]: ['123', 'rwqr', '343']
嵌套的列表
列表中可包含 python 中任何类型的元素(对象),当然也可以包括一个或多个列表
li = [['one', 'two', 'three'], [1, 2, 3]]
3.列表的基本操作
3.1 取值
没有嵌套的列表取值
ln [20]: n = ['we', 'eww', 1, 2]
In [21]: n[1]
Out[21]: 'eww'n
嵌套的列表取值
l2 = [['one', 'two', 'three'], [1, 2, 3]]
l2[0][1] # two
列表内的值是可以更改的
d2 = [1, 2, 3]
>>> d2[1]
2
>>> d2[1] = 5
>>> d2
[1, 5, 3]
3.2 切片 同字符串的切片一样
li_f = [ 'insert', 'append','extend', 'remove', 'pop', 'sort', 'sorted']
# 获取全部元素
li_f[:]
# 反转
li_f[::-1]
3.3 必会方法
# 先定义一个列表
li = [5, 4, 3, 2, 1, 0]
len()
方法是一个内置函数,可以统计序列类型的数据结构的长度。
n = len(li)
print(n) 6
in
判断元素是否存在于列表中。
In [3]: li = ['lenovo', 1314, '521']
In [4]: '521' in li
Out[4]: True
In [5]: 1314 in li
Out[5]: True
In [6]: if 'lenovo' in li:
...: print('ok')
...:
ok
In [7]:
append()
向列表的最后位置,添加一个元素,只接收一个参数。
In [7]: li.append(521) 不能这样赋值给b b = li.append(521) 错误
In [8]: li
Out[8]: ['lenovo', 1314, '521', 521]
insert()
向原列表的指定位置插入一个元素,接收两个参数,
第一个是索引号,第二个是要插入的元素。
In [9]: li.insert(0, 521)
In [10]: li
Out[10]: [521, 'lenovo', 1314, '521', 521]
extend()
可以把一个序列类型中的每个元素追加到原列表中,接收的参数是一个序列类型的数据(字符串,列表)。
In [11]: l2 = ['qf','yangge']
In [12]: li.extend(l2)
In [13]: li
Out[13]: [521, 'lenovo', 1314, '521', 521, 'qf', 'yangge']
remove()
移除列表中某个指定的元素,没有返回值,并且假如有多个相同值的元素存在,每次只会移除排在最前面的那个元素
In [14]: li.remove(521)
In [15]: li
Out[15]: ['lenovo', 1314, '521', 521, 'qf', 'yangge']
pop()
从原列表中删除一个元素,并且把这个元素返回。
接收零个或一个参数,参数是偏移量,int 类型。
# 删除列表中的最后一个元素
In [16]: name = li.pop()
In [17]: name
Out[17]: 'yangge'
In [18]: li
Out[18]: ['lenovo', 1314, '521', 521, 'qf']
# 删除列表中第二个索引号对应的元素,并且返回这个元素,用变量名`n` 接收。
In [19]: n = li.pop(-2)
In [20]: n
Out[20]: 521
In [21]: li
Out[21]: ['lenovo', 1314, '521', 'qf']
clear() 清空列表
>>> a.remove(2)
>>> a = [1, 2, 3]
>>> a.clear()
>>> a
[]
count() 统计列表中某个元素出现的次数 sort() 把列表中元素排序
reverse()把元素中位置进行反转 copy 复制一个一模一样的列表
index()返回元素中某个元素的索引号
三、元组
元组和列表一样,也是一种序列。
唯一的不同是,元组是相对不可变的。列表内元素可以修改 元组内元素不能修改
t1 = () # 创建 空 元素的元组
>>> t=()
>>> type(t) 类型
<class 'tuple'>
>>>
tuple()
可以对其他序列类型的数据转换为元组。
In [173]: s1 = 'car'
In [174]: li = [1,2,3]
In [175]: tuple(s1)
Out[175]: ('c', 'a', 'r')
In [176]: tuple(li)
Out[176]: (1, 2, 3)
In [177]: dl = [1,2,3,['a','b']]
In [178]: tuple(dl)
Out[178]: (1, 2, 3, ['a', 'b'])
- 使用元组的理由
占用内存空间小
元组内的值不会被意外的修改
可作为字典的键
函数的参数是以元组形式传递的
命名元组有时候可以代替类的对象