python学习第一步了解四大数据结构,他们分别为list、tuple、dict、set,初级目标是了解基本用法,进阶学习是了解底层如何实现。BUT 在这之前
在学习四大数据结构之前先来回顾下python的基本数据类型,简单回顾下数字、字符串、布尔类型三种。
基本数据类型
知其然更要知其所以然,语言的对比学习往往会让人更为深刻。python较C++更为简洁,比如声明一个变量,C++中常用的就是 数据类型 变量名,如下:int age = 20;
python中声明的变量是直接: 变量名 = 变量值,如下:age = 20
数字
C系语言中的整数类型有很多,如int,long,long long等,使用时应明确标出。
python中不需要明确类型,并且没有限制长整数的数值大小,如果发生溢出,会自动转换为长整数。python中的整数类型都是int,没有long
1 | age = 20 |
字符串
python中加了引号的都是字符串,而且多种形式的引号单独使用没有差别,只有在引号中嵌套引号才有些许差别,三引号的作用时换行和注释
1 | name = 'wwp' #单引号 |
字符串中其他的常用操作如下:
1 | name = "ada" |
布尔类型
true & flase
列表LIST
- List是由一系列特定顺序排列的元素组成—–有序的(与set相对)
- 用[]表示列表,并用逗号分隔其中的元素,列表的名称常定义为复数,
- 适用于存储在程序运行期间可能变化的数据集,是可以修改的—-元素可变(与tuple相对)
- 容纳python的任何对象(与字典相对)
访问列表元素
索引访问,下标从0开始。(==C++数组和vector也是索引访问,还记得数组和链表及vector的区别吗==)
注意:python访问最后一个列表元素,使用索引-1,返回列表的最后一个元素,常用于不知道列表长度的情况下,当然倒数第二个元素类推-2,-3,-4(不过列表为空时不能这样使用,会出错)
修改、增加和删除元素
修改元素:给列表中的某元素赋新值,重新print即修改
增加元素:
列表末尾添加元素
1
2
3names = ['Mary', 'Tom']
names.append('Jack')
print(names)
python中可以使用append动态的创建列表,如先创建一个空列表,再使用一系列的append()语句添加元素,类似建立一个空的vector,然后不断的push_back()元素
2.列表中插入,insert(索引值,新元素值)可以在任何位置添加新元素
删除元素:
- 根据索引删除元素,元素后期不再使用
del names[0]
2.删除列表末尾的元素,并继续使用存入变量,names.pop(),类似栈的弹出
3.删除任何位置的元素,并存入变量,names.pop(索引)
4.根据值删除元素,names.remove(‘Mary’),remove只是删除第一个出现的值,如果某元素重复出现多次,应该循环判断是否删除完毕
组织列表
- 永久性排序,不可恢复,names.sort(),/names.sort(reverse=True)逆序
- 临时显示特定排序,不影响列表的原始顺序,print(sorted(names))
- 反转列表的排列顺序,names.reverse(),逆序,如果需要恢复,再次reverse
- 求列表长度len(names)
数值列表
- range(start,end)函数,输出从start开始的数字,到end结束(不包括end)
- list(range(start, end))函数,把range的结束直接转换为列表
- range(start, end, step)可以指定步长增加直到end
切片(部分元素)
- 指定开始和结尾索引,在结尾索引前停止(不包括结尾处)
- 没有指定开始索引代表从列表头开始,没有制定结束索引,代表从列表尾结束
- 复制列表,同时省略起始索引
元组tuple
不可修改的不可变的列表,使用圆括号()表示,同样使用索引访问元组,即可查询不可修改的列表
字典dict
- 花括号表示{key:value},元素是key与value的对应关系组,通过key访问value
- key键不能重复,但是值可以重复
- 字典中的key键是不可变的,无法修改的,但是值value是可变的可修改的,可以是任何对象
- 无序存储,python对key进行哈希数字运算,根据计算结果决定value的地址,所以是无序,所以key需要是能被哈希的,即必须是不可变类型,数字字符串元组
1 | # 还记得C++的map吗 |
集合set
- 花括号表示{},无序的,不重复的,任意的元素,是不是跟C++的set很像
- 一般用set去掉重复元素
- 集合不能切片也不能使用索引,毕竟是无序的
总结:每个数据结构应该处理哪些数据,应用在哪些场景中