Python基础三天入门(第二天)
Python基础入门系列主要总结Python相对于Java语法区别
参考资料:
https://www.bilibili.com/video/BV1wD4y1o7AS?p=99&spm_id_from=pageDriver&vd_source=dd9bdf6f42e38406b07ef92b986e8171
列表
- 列表的创建与删除
- 列表的创建方式
- 使用中括号[],元素之间使用英文的逗号进行分隔
- 调度内置函数list()
- 列表的查询操作
- 获取列表中指定元素的索引 – index()
- 如果列表中存在N个相同元素,只返回相同元素的第一个元素的索引
- 如果查询的元素在列表中不存在,则会抛出ValueError
- 还可以在指定的start和stop之间进行查找
- 获取列表中的单个元素
- 正向索引从0到N-1
- 逆向索引从-N到-1
- 指定索引不存在,抛出IndexError
- 获取列表中的多个元素 – 切片操作
- 切片的结果:原列表片段的拷贝
- 切片的范围:[start,stop]
- step默认为1:简写为[start:stop]
- step为正数:从start开始往后计算切片
[:stop:step]:切片的第一个元素默认是列表的第一个元素
[start::step]:切片的最后一个元素默认是列表的最后一个元素 - step为负数:从start开始往前计算切片
[:stop:step]:切片的第一个元素默认是列表的最后一个元素
[start::step]:切片的最后一个元素默认是列表的第一个元素
- 判断指定元素在列表中是否存在
- 元素 in 列表名
- 元素 not in 列表名
- 列表元素的遍历
for 迭代变量 in 列表名
- 列表元素的增、删、改操作
- 列表元素增加操作
- append():在列表的末尾添加一个元素
- extend():在列表的末尾至少添加一个元素
- inset():在列表的任意位置添加一个元素
- 切片:在列表的任意位置添加至少一个元素
- 列表元素的删除操作
- remove():一次删除一个元素;重复元素只删除一个;元素不存在抛出ValueError
- pop():删除一个指定索引位置上的元素;指定索引不存在抛出IndexError;不指定索引,删除列表中最后一个元素
- 切片:一次至少删除一个元素
- clear():清空列表
- del:删除列表
- 列表元素的修改操作
- 为指定索引的元素赋予一个新值
- 为指定的切片赋予一个新值
- 列表元素的排序
- 调用sort()方法,列表中的所有元素默认按照从小到大的顺序进行排序,可以指定reverse=True,进行降序排序
- 调用内置函数sorted(),可以指定reverse=True,进行降序排序,原列表不发生改变
- 列表生成式
variable = [out_exp for out_exp in input_list if out_exp == 2]
生成11,22,… 10*10
6. 列表的特点
- 列表元素按顺序有序排序
- 索引映射唯一个数据
- 列表可以存储重复数据
- 任意数据类型混存
- 根据需要动态分配和回收内存
字典
- 什么是字典
- Python内置的数据结构之一,与列表一样是一个可变序列
- 以键值对的方式存储数据,字典是一个无序的序列
- 字典的原理
- 类似于Java中的map
- 字典的创建
- 最常用的方式:使用花括号{}
- 使用内置函数dict()
- 字典的查询操作
- []取值:如果字典中不存在指定的key,抛出keyError异常
- get()取值:如果字典中不存在指定的key,并不会抛出KeyError而是会返回None,可以通过参数设置默认的value,以便指定的key不存在时返回
- 字典元素的增、删、改操作
- key的判断
- in 指定的key在字典中存在返回True
- not in 指定的key在字典中不存在返回True
- 字典元素的删除
- del scored[‘张三’]
- 字典元素的新增
- scores[‘Jack’]=90
- 获取字典视图的三种方法
- keys():获取字典中所有的key
- value():获取字典中所有的value
- items():获取字典中所有的key,value对
- 字典的特点
- 字典中的所有元素都是一个key-value对,key不允许重复,value可以重复
- 字典中的元素是无序的
- 字典中的key必须是不可变对象
- 字典也可以根据需要动态地伸缩
- 字典会浪费较大的内存,是一种使用空间换时间的数据结构
- 字典生成式
- 内置函数zip():用于将可迭代的对象作为参数,将对象对一个的元素打包成一个元组,然后返回由这些元组组成的列表
元组
- 什么是元组
- Python内置的数据结构之一,是一个不可变序列
- 不可变序列与可变序列
- 不可变序列:字符串、元组;没有增、删、改操作
- 可变序列:列表、字典;可以对序列执行增、删、改操作,对象地址不发生更改
- 元组的创建
- 直接小括号()
- 使用内置函数tuple()
- 只包含一个元组的元素需要使用逗号和小括号
- 元组设计成不可变序列
- 在多任务环境下,同时操作对象时不需要加锁
- 在程序中尽量使用不可变序列
- 注意事项
- 元组中存储的是对象的引用
- 如果元组中对象本身不可变对象,则不能再引用其他对象
- 如果元组中的对象是可变对象,则可变对象的引用不允许改变,但数据可以改变
- 元组的遍历
- 元组是可迭代对象,可以使用for…in进行遍历
集合
- 什么是集合
- Python语言提供的内置数据结构
- 与列表、字典一样都属于可变类型的序列
- 集合是没有value的字典
- 集合的创建
- 直接{}
- 使用内置函数set()
- 集合的增、删、改、查操作
- 集合元素的判断
- in
- not in
- 集合元素的新增操作
- add():一次添加一个元素
- update():至少添加一个元素
- 集合元素的删除操作
- remove():一次删除一个指定元素,如果指定元素不存在抛出keyError
- discard():一次删除一个指定元素,如果指定的元素不存在不抛出异常
- pop():一次只删除一个任意元素
- clear():清空集合
- 集合的关系
- 两个集合是否相等==或!=
- 一个集合是否是另一个集合的子集issubset
- 一个集合是否是另一个集合的超集issuperset
- 两个集合是否没有交集isdisjoint
- 集合的数学操作
- 交集
- 并集
- 差集
- 对称差集
- 集合生成式
- 相对列表生成式,将[]改为{}即可
variable = {out_exp for out_exp in input_list if out_exp == 2}
字符串
- 字符串的驻留机制
- 字符串是Python中的基本数据类型,是一个不可变的字符序列
- 字符串驻留机制:仅保存一份相同且不可变字符串的方法,不同的值被存放在字符串的驻留池中,Python的驻留机制对相同的字符串只保留一份拷贝,后续创建相同字符串时,不会开辟新空间,而是把字符串的地址赋给新创建的变量
- 驻留机制的几种情况(交互模式)
- 字符串的长度为0或1时
- 符合标识符的字符串
- 字符串只在编译时进行驻留,而非运行时
- [-5,256]之间的整数数字
- sys中的intern方法强制2个字符串指向同一个对象
- Pycharm对字符串进行优化处理
- 字符串驻留机制的优缺点
- 当需要值相同的字符串时,可以直接从字符串池里拿来使用,避免频繁的创建和销毁,提升效率和节约内存,因此拼接字符串和修改字符串是会比较影响性能的
- 在需要进行字符串拼接时建议使用str类型的join方法,而非+,因为join()方法是先计算出所有字符串的长度,然后再拷贝,只new一次对象,效率要比"+"效率高
- 字符串的常用操作
- 查询操作
- index():查找子串substr第一次出现的位置,如果查找的子串不存在时,则抛出ValueError
- rindex():查找子串substr最后一次出现的位置,如果查找的子串不存在时,则抛出ValueError
- find():查找子串substr第一次出现的位置,如果查找的子串不存在时,则返回-1
- rfind():查找子串substr最后一次出现的位置,如果查找的子串不存在时,则返回-1
- 大小写转换
- upper():把字符串中所有的字符都转成大写字母
- lower():把字符串中所有的字符都转成小写字母
- swapcase():把字符串中所有的大写字母转成小写字母,把所有的小写字母转成大写字母
- capitalize():把第一个字符转换成大写,把其余字符转换成小写
- title():把每个单词的第一个字符转换成大写,把每个单词的剩余字符转换成小写
- 对齐操作
- center():居中对齐
- ljust():左对齐
- rjust():右对齐
- zfill():右对齐,左边用0填充
- 字符串劈分
- split()
- 从字符串的左边开始劈分,默认的劈分字符时空格字符串,返回值都是一个列表
- 以通过参数sep指定劈分字符串是的劈分符
- 通过参数maxsplit指定劈分字符串时的最大劈分次数,在经过最大次劈分后,剩余的子串会单独做为一部分
- rsplit()
- 从字符串的右边开始劈分,默认的劈分字符是空格字符串,返回值都是一个列表
- 以通过参数sep指定劈分字符串是的劈分符
- 通过参数maxsplit指定劈分字符串时的最大劈分次数,在经过最大劈分次数后,剩余的子串会单独做为一部分
- 字符串判断
- isidentifier():判断指定的字符串是不是合法的标识符
- isspace():判断指定的字符串是否全部由空白字符组成
- isalpha():判断指定的字符串是否全部由字母组成
- isdecimal():判断指定的字符串是否全部由十进制的数字组成
- isnumeric():判断指定的字符串是否全部由数字组成
- isalnum():判断指定字符串是否全部由字母和数字组成
- 字符串替换
- replace():第一个参数指定被替换的子串,第二个参数指定替换子串的字符串,该方法返回替换后得到的字符串,替换前的字符串不发生变化,调用该方法时可以通过第3个参数指定最大替换次数
- 字符串合并
- join():将列表或元组中的字符串合并成一个字符串
- 字符串的比较
- 运算符
-
,>=,<,<=,==,!=
-
- 比较规则
- 首先比较两个字符串中的第一个字符,如果相等则继续比较下一个字符,依次比较下去,直到两个字符串中的字符不相等时,其比较结果就是两个字符串的比较结果,两个字符串中的所有后续字符将不再被比较
- 比较原理
- 两个字符进行比较时,比较的是其ordinal value(原始值),调用内置函数ord可以得到指定字符的ordinal value。与内置函数ord对应的是内置函数chr,调用内置函数chr时指定ordinal value可以得到其对应的字符
- 字符串的切片操作
- 字符串是不可变类型,不具备增、删、改等操作;
- 切片操作将产生新的对象
- 格式化字符串
- %作占位符
- %s 字符串占位符
- %i或%d 整数占位符
- %f 浮点数占位符
- {}作占位符
- 字符串的编码转换
函数
- 函数的创建和调用
- 函数的参数传递
- 函数的返回值
- 函数的参数定义
- 变量的作用域
- 递归函数
异常和bug
- bug的由来及分类
- 粗心导致错误的自查宝典
- 漏了末尾的冒号,如if语句,循环语句,else子句等
- 缩进错误,该缩进的没缩进,不该缩进的瞎缩进
- 把英文符号写成中文符号
- 字符串拼接的时候,把字符串和数字拼在一起
- 没有定义变量,比如while的循环条件的变量
- “==”比较运算符和“=”赋值运算符的混用
- 思路不清导致的问题解决方案
- 使用print()函数
- 使用“#”暂时注释部分代码
- 异常处理机制
- try except
- try except else
- try except else finally
- 常见的异常类型
- ZeroDivisionError
- 除(或取模)零(所有数据类型)
- IndexError
- 序列中没有此索引(index)
- KeyError
- 映射中没有这个键
- NameError
- 未声明/初始化对象(没有属性)
- SyntaxError
- Python语法错误
- ValueError
- 传入无效的参数