数据结构的主要学习知识
线性表
顺序表
数组(array)
链表(list)
队列(queue) --- 先进先出(FIFO),后进后出(LILO)
栈(stack) --- 先进后出(FILO),后进先出(LIFO)
哈希表
树
图
绝大多数编程,考虑到开发者都不一定擅长创建自己的数据结构,为开发者提供了内置好的数据结构我们称为容器,减轻开发者的压力和重复造轮子
python中的四个内置容器
List --- 列表 在python JavaScript PHP ruby 这些弱数据类型的编程语言,他们都不存在数组,无论它提供的叫不叫数组,都不是数组,大概率是链表
python提供的list ,底层是一个双向链表结构
如何获取定义list
A = [ ]
全局函数list函数
B = list([1,2,3,4,5])
如何获取列表的元素(element)
下标或者角标
如何获取列表的长度
Len(a)
获取最后一个元素
d[len(d) - 1]
如何遍历列表
一。使用for循环
For I in list :
Print(i)
二。使用while
I = 0
While I <= len(list) :
Print(list[i])
I += 1
思考:若想在一个列表中增加新的元素,删除已有的元素,怎么办?
新增
Append(元素) --- 将元素追加到尾部
Insert(index,元素) --- 将元素插入到index位置、
a.insert(len(a),元素) --- 尾部
Extend(列表) --- 合并,且前列表内容会变为合并后的
在python中,可以使用 a + b 合并列表,但是列表内容不变
删除
remove(元素) --- 根据元素移除,若无此元素会报错,若有相同元素,则只移除第一个
Pop --- 删除并打印该元素,括号加下标,若无则默认最后一个元素,下标不存在和列表为空则抛出异常
Clean --- 清空列表
查询
index() --- 获取下标,通过获取某一个值的下标,有相同元素则返回第一个元素的下标
Count(值) --- 统计某一个元素出现的次数,不存在返回0
列表编辑
reverse() --- 反转列表中元素的顺序,注意和全局函数reversed的区别
Reversed --- 不会反转列表,但是会创建一个反转列表的迭代器
Sort() --- 排序,同一数据类型才能使用,从左到右按照升序排序,字符串使用ask码排序(字母表顺序),可以在括号中设置(reverse = false or ture) 来设置使用升序还是降序
copy() --- 浅拷贝对象
引用传递,浅拷贝,深拷贝
引用传递 --- (d = c),仅仅是将引用地址复制给其他变量,本质还是指向同一个内存
浅拷贝 --- 拷贝堆内存,会产生新的内存空间,仅仅拷贝第一层对象
深拷贝 --- 使用递归,拷贝所有对象
Set --- 集合
底层采用的hash table 实现的
哈希表的特点 --- 无序的,不能重复,
创建set
S = {1,3,5,7,9,11}
空set --- s = {ss}
将一个列表去重
Set() --- 转换为set去重
List(set(c)) --- 转换回去,但列表顺序不一定一样,哈希表在插入元素时会重新计算导致数据不固定
只能用for循环迭代set中的所有值,while循环需要下标此才行
常见方法
Clear
copy
s.add() --- 随机位置插入值
Remove
Pop --- 随意删除一个元素
Discard --- 删除不存在的元素时,不会报错
Intersection --- 交集
Union --- 并集,也会打乱顺序
Difference --- 差集
Tuple --- 元组 --- 一组固定不变的值
在其他编程语言中叫枚举
创建
Tuple()
T = (1,2,3,4)
创建后就无法变了,元组是不可变数据类型,基础数据类型都是不可变的
元组是有下标的
方法仅有两个
Count --- 统计
Index --- 查询下标
创建单个元素的元组
T = (1,) 必须加一个逗号,不然括号会被认为提高优先级,从而类型不是元组
Dict --- 字典,也属于哈希表
可迭代对象 --- 可以用for循环直接迭代子项的