Python基础
1. Python的数据类型
1. Numbers 数字类型
包括 int(整型);bool(布尔类型);float(浮点型);complex(复数)
2. String 字符串类型
1. 用单引号或者双引号标识
2. 转义\ 或 r 可以使转义字符失去转义效果
3. 联级字符串,如 “this ” “is ” “string” 会被自动转换为 this is string
4. 字符串拼接, + 将字符串拼接起来,* 重复字符串
5. 字符串索引:从左往右从0开始,从右往左从-1开始
6. 字符串的截取语法格式:变量 [ 头下标 : 尾下标 : 步长 ]
3. tuple 元组类型
元组用()标识,内容不可改变
4. list 列表类型
列表用[]标识,内容可以更新修改
5. dict 字典
字典用{}标识,以键值对的形式表示 {‘key’ : ‘value’ }
6. set 集合
集合用 {}标识,内部的数据是不重复的
2. 数据类型转换
1. 隐式转换,可以兼容的不同类型相加,转换为同一类型
2. 显式转换,使用关键字将不同类型强制转换
1. 转换为int类型——int()
2. 转换为float类型——float()
3. 转换为字符串类型
4. 转换为元组类型——tuple()
5. 转换为列表类型——list()
6. 转换为字典类型——dict()
7. 转换为集合类型——set()
3. Python推导式
1. 推导式是一种独特的数据处理方式,可以将数据序列构建另一个数据序列的结构体
2. 语法:表达式 for 迭代变量 in 可迭代对象 [ if 条件表达式 ]
3. 列表推导式:list = [ i for i in 可迭代对象 if 条件语句 ]
- # 常规循环
- lis = []
- for i in range(5): lis.append(i)
- # 使用列表推导式
- j = [j for j in range(5) if j > 2] # [3, 4]
- # 嵌套列表推导式
- l1 = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
- l1 = [l1[i][i] for i in range(len(l1))] # [1, 5, 9]
- # 通过循环列表得到新的符合条件的列表
- list1 = [1, 2, 4, 5, 7, 4, 5, 7, 8, 4, 3, 5, 6, 5, 6, 6]
- list2 = [list2 + 2 for list2 in list1 if (list2 % 3 == 0)]
- # 可以进行多个for循环
- list3 = [(x, y, z) for x in range(5) for y in range(4) for z in range(3)]
4. 字典推导式: dict = { key :value for i , j in 可迭代对象 if 条件语句 }
- # 字典推导式
- dict0 = {x: y for x in ('a', 'b', 'c') for y in (1, 2, 3,)} # {'a': 3, 'b': 3, 'c': 3}
- # 通过循环修改原来的字典
- dict1 = {"a": 10, "B": 20, "D": "hello world", "e": "python教程"}
- # 筛选出key是小写字母的值
- dict2 = {key: value for key, value in dict1.items() if (key.islower())} # {'a': 10, 'e': 'python教程'}
- # 将key的值全部变成小写字母
- dict3 = {key.lower(): value for key, value in dict1.items()} # {'a': 10, 'b': 20,'d': 'hello world', 'e': 'python教程'}
5. 集合推导式: set = { i for i in 可迭代对象 if 条件语句 }
- # 集合推导式: 集合推导式和字典推导式都是用{}表示,字典是键值对形式,反之是集合
- set1 = {x * 2 for x in (1, 2, 2, 3, 4) if x >= 2} # {8, 4, 6} 集合自动去重
- # 推到对象为字典,keys(),values(),items()
- set2 = {x for x in {'1': 1, '2': 2}.items()} # {'2', '1'}
6. 元组推导式: tuple = ( i for i in 可迭代对象 if 条件语句 )
- # 元组推导式,元组推导式和列表相同,但是元组推导式返回的是一个生成器对象
- tup = (x for x in range(10)) # <generator object <genexpr> at 0x0000024884365E40>
- # 用类型转换tuple()将对象转换为元组
- tup1 = tuple(tup) # (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
4. Python运算符
1. 算术运算符
+ 加法 - 减法 * 乘法 / 除法
% 取余 ** 幂 // 向下取整
2. 比较运算符
> 大于号 < 小于号 = 等于号
>= 大于等于号 <= 小于等于号 != 不等于号
3. 赋值运算符
+= 加法赋值运算符 -= 减法赋值运算符
*= 乘法赋值运算符 /= 除法赋值运算符
%= 取余赋值运算符 **= 幂赋值运算符
//= 取整赋值运算符 := 海象赋值运算符
4. 位运算符
& 位与运算符,对应的两个二进制都为1时,结果位为1
| 位或运算符,对应的两个二进制有一个为1时,结果位为1
^ 位异或运算符,对应的两个二进制相异时,结果位为1
~ 位取反运算符,对每个二进制位取反,是负数,~x 类似于-x-1
<< 左移动运算符,二进制的位数向左移动,高位丢弃,低位补零
>> 右移动运算符,二进制的位数向右移动,高位丢弃,低位补零
- # 位运算符
- a = 60 # 即 0011 1100
- b = 13 # 即 0000 1101
- a & b # 12 0000 1100
- a | b # 61 0011 1101
- a ^ b # 49 0011 0001
- ~a # -61 1100 0011
- a << 2 # 240 1111 0000
- a >> 2 # 15 0000 1111
5. 逻辑运算符
and 与,即满足所有条件则为真
or 或,即满足其中之一都为真
not 非,如果x为true,返回false,x为false,返回true
6. 成员运算符
in 如果在指定的序列中找到值返回true,否则返回false
not in 如果在指定的序列中没有找到值返回true,否则返回false
7. 身份运算符
is 判断两个标识符是不是引用自一个对象
is not 判断两个标识符是不是引用自不同对象
8. 海象运算符
- # 海象运算符类似于赋值运算符,本质上是一个赋值表达式,具有返回值,不能单独使用,他可以将赋值掺杂在表达式之中,简化代码,没有区分优先级
- # 主要应用场景
- # 在if后面使用
- # if传统用法
- a = 1
- if a > 0: a += 1 # 2
- # 使用海象运算符
- if b := 1 > 0: b += 1 # 2
- # 在while后面使用,传统
- numbers = [1, 2, 3, 4, 0, 5, 6]; i = 0; j = numbers[i]
- while j != 0:
- print("我是", j, "循环继续!")
- i += 1
- j = numbers[i]
- # 使用海象运算符
- numbers1 = [2, 3, 5, 7, 5, 0, 2, 3]
- k = 0
- while x := numbers1[k] != 0:
- print("我是", x, "循环继续!") # 我是 True 循环继续!
- k += 1
- # 在列表中使用
- n = [(m := 1) + 1, m - 1, m * 1, m / 1] # [2, 0, 1, 1.0]
5. 常用的内置数学函数
- python常用的内置数学函数
- 1.abs(x) 返回数字的绝对值 abs(-2) = 2
- 2.max(...) 返回最大值 max(1,2,3,4,2,1) = 4
- 3.min(...) 返回最小值 min(1,2,3,4,3,2,1) = 1
- 4.pow(x,y,z) x的y次方运算取余z后的值,z为可选参数 pow(3,3) = 27
- 5.random.choice(x) 在给定序列中挑选一个随机数 random.choice([1, 2, 3, 4])
- 6.random.random() 随机生成一个实数,范围(0,1]之间 random.random()
- 7.random.randint(x,y) 随机选取x-y范围内的实数 random.randint(1,10)
- 8.random.shuffle(x) 将序列的所有元素随机排序 print(random.shuffle([1,2,3,4,5])) = None 不能直接输入
- 9.uniform(x,y) 随机生成一个浮点数,范围在[x,y]之间 random.uniform(1,3) = 1.630618864424037(随机改变)
- 10.ramdom.sample(序列, x) 在序列中随机选取x个数 random.sample([1,2,3,4,5,6],3) 随机获取三个数
6. 常用的math函数
- python常用的math函数
- 9.math.modf(x) 返回x的带符号小数和整数部分 math.modf(-23.45) = (-0.4499999999999993, -23.0)
- 10.math.fmod(x,y) 返回x%y的值可带符号,对比正常的x%y取余时当x为负数时,取值会有出入 math.fmod(-22,3) = -1.0 比较 22 % 3 = 2
- 11.math.ceil(x) 向上取整 math.ceil(3/2) = 2
- 12.math.floor(x) 向下取整 math.floor(10/3) = 3
- 13.math.prod(iterable,start) 求iterable中所有值的积,start可选初始值 math.prod((1, 2, 3, 2), start=2) = 24
- 14.math.copysign(x,y) 返回x的浮点值取y的正负符号 math.copysign(2,-22) = -2.0
- 15.math.fabs(x) 返会x的绝对值 math.fabs(-22.22) = 22.22
- 16.math.lcm(...) 返回输入参数的最小公倍数 math.lcm(2,3,4,6) = 12
- 17.math.gcd(...) 返回输入参数的最大公约数 math.gcd(3,6,9,12) = 3
- 18.math.sqrt(x) 返回非负x的平方根 math.sqrt(26) = 5.0990195135927845
- 19.math.isqrt(x) 返回非负x的最大整数平方根 math.isqrt(20) = 4
- 20.math.perm(n,k) 返回不重复且有顺序的组合,正整数,n>=k,结果为 n! / (n-k)! math.perm(4.2) = 20
- 21.math.comb(n,k) 返回不重复且无顺序的组合,正整数,n>=k,结果为 n! / (k! * (n-k)!) math.comb(5,2) = 10
- 字符串中访问指定的值
- 1.用[i]下标表示,从左到右顺序从0开始,从右到左顺序从-1开始
- 2.变量[头下标:尾下标],截取字符串区间
2. 字符串改变值
- 字符串改变值
- 1.切片发:拼接 +,截取不需要改变的内容+需要改变的内容
- 2.replace函数:newSstr=str.replace(oldstr,newstr)
3. 转义字符
- 转义字符
- 1.\(在行尾时) 表示续行,即可以从下一行继续编辑
- 2.\\ 反斜杠 即取消\的转义作用
- 3.\' 单引号
- 4.\" 双引号
- 5.\000 空 即执行后显示空行
- 6.\n 换行
- 7.\r 回车 后面的内容移到字符串开头,并逐一替换开头部分的字符,直至将 \r 后面的内容完全替换完成。
- 8.r'字符串' 原始字符串,即字符串按照原来的内容输出,没有转义作用
4. 字符串格式化
- 字符串格式化(format % value)
- %s 格式化字符串
- %d 格式化整数
- %nd 设置输入数字长度,不够则在前面空格补齐,n为0时用0补齐
- %.nf n表示保留几位小数
- 例:print("我是%s,今年0%d,我会%.2f!" % ('小明', 22, 22.22222)) # 我是小明,今年022,我会22.22!
5. 字符串format函数
- 字符串format函数(字符串.format(value))
- 1.如果{}中没有具体的下标,会依次进行替换value值
- 例:print('我叫{},今年{}岁!'.format('小红', 23)) # 我叫小红,今年23岁!
- 2.如果{}中设置了具体下标,则会按要求进行替换
- 例:print('我叫{1},今年{0}岁!'.format(12, '小红', 23)) # 我叫小红,今年12岁!
- 3.可以设置具体关键字进行替换value值
- 例:print('我是{name},{sex},今年{age}岁!'.format(sex='男', name='强子', age=27)) # 我是强子,男,今年27岁!
- 4.使用**传递字典作为关键字传递
- 例:dict0 = {'name': '修勾', 'sex': '女', 'age': 24}
- print('我叫{name:s},{sex:s},今年{age:d}'.format(**dict0)) # 我叫修勾,女,今年24
- 5.模板字符串 %
- 例:print(Template('我叫$name,今年$age').substitute({'name':'python','age':22})) # 我叫python,今年22
- 6.f 万金油用法:f"{变量}",可以面向对象,字典等
- 例:dict1 = {'name': '小脑斧', 'sex': '女', 'age': 21}
- print(f"我叫{dict1['name']},{dict1['sex']},今年{dict1['age']}") # 我叫小脑斧,女,今年21
6. 三引号
- # 三引号,允许字符串跨行,包含特殊字符,单引号和双引号都可以
para_str = '''这是一个多行字符串的实例
- 多行字符串可以使用制表符
- TAB ( \t )。
- 也可以使用换行符 [ \n ]。
- '''
7. 常用的字符串函数
- 字符串常用函数
- 1.capitalize() 将字符串第一个字母换为大写
- 2.center(width,fillchar) 返回一个指定的宽度 width 居中的字符串,fillchar 为填充的字符,默认为空格。
- 3.count(str,初始范围值,结束范围值) 返回 str 在指定字符串里面出现的次数
- 4.endswith(str,初始范围值,结束范围值) 检查字符串是否以 obj 结束,是返回true,否则false
- 5.find(str,初始范围值,结束范围值) 检查str是否在指定的字符串范围内,如果包含返回开始的索引值,否则返回-1
- 6.index(str,初始范围值,结束范围值) 语法跟find一样,但是它会在不匹配的时候返回一个错误信息
- 7.isalnum() 用来筛选都是字母或者数字的字符串
- 8.isalpha() 用来筛选都是字母或者中文的字符串
- 9.isdigit() 用来筛选只包含数字的字符串
- 10.islower() 用来筛选都是小写字母的字符串
- 11.isupper() 用来筛选都是大写字母的字符串
- 12.join(seq) 以指定字符串作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串
- 13.len(str) 返回字符串长度
- 14.lower() 转换字符串中所有的大写字母为小写字母
- 15.upper() 转换字符串中所有的小写字母为大写字母
- 16.lstrip() 截掉字符串左边的空格或者指定字符串(有参数时)
- 17.max(str) 返回字符串中最大的字符
- 18.min(str) 返回字符串中最小的字符
- 20.replace(old,new) 字符串替换
- 21.rfind(str) 类似于find,但是是从右边开始查找
- 22.rindex(str)类似于index,但是是从右边开始查找
- 23.ljust(width,fillchar) 左填充,没有指定参数用空格填充
- 24.rjust(width,fillchar) 右填充,没有指定参数默认用空格填充
- 25.rstrip(char) 删除字符串末尾的空格或指定字符
- 26.split() 将字符串以参数为分隔符进行截取
- 27.strip() lstrip和rstrip的和写,移除字符串首尾的空格或指定字符串
- 28.swapcase() 将字符串的大写转为小写,小写转为大写
- 29.titl() 返回标题化字符串,即所有单词首字母为大写,其余为小写