1.Python运算符
(1).算术运算符
-
+
:加法 -
-
:减法 -
*
:乘法 -
/
:除法 -
%
:取余(取模) -
**
:幂运算 -
//
:整除(向下取整)除法/结果为浮点数
整除//结果的数据类型与分子分母有关(如下所示)
不同类型的数混合运算时会将整数转换为浮点数
a = 17/3 # 结果为浮点型:5.6666666666666 b = 17//3 # 结果为:5 c = 17.0//3 # 结果为:5.0 d = 17//3.0 # 结果为:5.0
(2).比较运算符
在Python中,is not
是一种身份运算符,用于判断两个对象是否不是同一个对象,is
用于判断两个对象是否是同一个对象。
-
a is b
返回True
当且仅当a
和b
是同一个对象(即它们的身份相同) -
a is not b
返回True
当且仅当a
和b
不是同一个对象(即它们的身份不同)
a = [1, 2, 3] b = a c = [1, 2, 3] print(a is b) # True,因为 a 和 b 是同一个对象 print(a is c) # False,因为 a 和 c 是不同的对象,即使它们的内容相同 print(a is not c) # True,因为 a 和 c 不是同一个对象
补充知识点
表达式和语句的概念
-
表达式
是由数字,字符串(文字), 运算符,函数调用等组成,通常用于计算并得到一个结果
表达式是语文中的字或短语
-
语句
语句是计算机执行程序的最小单位
-
示例
a = 100 # 赋值语句 print(a) # 表达式语句 del a # del 语句
-
-
函数调用是表达式
学过的函数
input('xxxx') 返回字符串
print("xxxx") 返回 None
函数调用语法规则
函数名(传入的参数)
None 是表示空值的一个对象
-
python中的假值对象
None # 空值对象 False # 布尔类型的假值 0 # 整数的0 0.0 # 浮点数的0 '' # 字符串的空字符串 [] # 空列表 {} # 空字典
(3).位运算符
Python中的位运算符主要用于处理整数类型的二进制位操作。以下是Python中的6种主要位运算符:
-
&
:按位与 -
|
:按位或 -
^
:按位异或 -
~
:按位取反 -
<<
:左移位 -
>>
:右移位
-
按位与(&):
-
表达式:
a & b
-
功能:对于每一位,如果a和b的相应位都是1,则结果位为1,否则为0。
# 示例:计算两个二进制数的按位与 a = 0b1011 # 二进制表示的11 b = 0b1101 # 二进制表示的13 result_and = a & b # 计算两者之间的按位与 print(bin(result_and)) # 输出:0b1001 (十进制为9)
-
-
按位或(|):
-
表达式:
a | b
-
功能:对于每一位,只要a和b中至少有一位是1,则结果位为1,否则为0。
# 示例:计算两个二进制数的按位或 a = 0b1011 b = 0b1101 result_or = a | b # 计算两者之间的按位或 print(bin(result_or)) # 输出:0b1111 (十进制为15)
-
-
按位异或(^):
-
表达式:
a ^ b
-
功能:对于每一位,如果a和b的相应位不同(一个为1,另一个为0),则结果位为1,否则为0。
# 示例:计算两个二进制数的按位异或 a = 0b1011 b = 0b1101 result_xor = a ^ b # 计算两者之间的按位异或 print(bin(result_xor)) # 输出:0b110 (十进制为6)
-
-
按位取反(~):
-
表达式:
~a
-
功能:对操作数a的每一个二进制位进行取反,即将1变为0,0变为1。
# 示例:计算一个二进制数的按位取反 a = 0b1011 result_not = ~a # 计算a的按位取反 print(bin(result_not)) # 输出:-0b1100
-
-
左移运算符(<<):
-
表达式:
a << b
-
功能:将a的二进制表示向左移动b位,左边移出的部分会被丢弃,右边空出的位置补零。相当于乘以2^n次方
# 示例:将一个二进制数向左移动两位 a = 0b1011 result_left_shift = a << 2 # 将a向左移动两位 print(bin(result_left_shift)) # 输出:0b101100 (十进制为44)
-
-
右移运算符(>>):
-
表达式:
a >> b
-
功能:将a的二进制表示向右移动b位,对于无符号整数,右边移出的部分会被丢弃,左边空出的位置补零(通常补0);对于有符号整数,右移时取决于具体实现,可能是算术右移(符号位扩展)或者逻辑右移(补0)。同理,相当于除以2^n
-
# 示例:将一个有符号二进制数向右移动一位 a = -0b1000 # 十进制为-8 result_right_shift = a >> 1 # 将a向右移动一位 print(bin(result_right_shift)) # 输出:-0b100 (十进制为-4) # 对于无符号数的例子 unsigned_a = 0b1000 unsigned_result_right_shift = unsigned_a >> 1 print(bin(unsigned_result_right_shift)) # 输出:0b100 (十进制为4)
(4).运算符的优先级
-
运算符优先级表
运算符 描述 (expressions...)
,[expressions...]
,{key: value...}
,{expressions...}
绑定或加圆括号的表达式,列表显示,字典显示,集合显示 x[index]
,x[index:index]
,x(arguments...)
,x.attribute
抽取,切片,调用,属性引用 await x
await 表达式 **
乘方 +x
,-x
,~x
正,负,按位非 NOT *
,@
,/
,//
,%
乘,矩阵乘,除,整除,取余 +
,-
加和减 <<
,>>
移位 &
按位与 AND ^
按位异或 XOR |
按位或 OR in, not in, is, is not, <
,<=
,>
,>=
,!=
,==
比较运算,包括成员检测和标识号检测 not x
布尔逻辑非 NOT and 布尔逻辑与 AND or 布尔逻辑或 OR if -- else
条件表达式 lambda lambda 表达式 :=
赋值表达式
2.数学函数,三角函数,数学常量
导入math模块
import math
函数 | 返回值 ( 描述 ) |
---|---|
abs(x) | 返回数字的绝对值,如abs(-10) 返回 10 |
math.ceil(x) | 返回数字的上入整数,如math.ceil(4.1) 返回 5 |
cmp(x, y) | 如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1。 Python 3 已废弃,使用 (x>y)-(x<y) 替换。 |
math.exp(x) | 返回e的x次幂(ex),如math.exp(1) 返回2.718281828459045 |
math.fabs(x) | 以浮点数形式返回数字的绝对值,如math.fabs(-10) 返回10.0 |
math.floor(x) | 返回数字的下舍整数,如math.floor(4.9)返回 4 |
math.log(x) | 如math.log(math.e)返回1.0,math.log(100,10)返回2.0 |
math.log10(x) | 返回以10为基数的x的对数,如math.log10(100)返回 2.0 |
max(x1, x2,...) | 返回给定参数的最大值,参数可以为序列。 |
min(x1, x2,...) | 返回给定参数的最小值,参数可以为序列。 |
math.modf(x) | 返回x的整数部分与小数部分,两部分的数值符号与x相同,整数部分以浮点型表示。 |
math.pow(x, y) | x**y 运算后的值。 |
round(x ,n) | 返回浮点数 x 的四舍五入值,如给出 n 值,则代表舍入到小数点后的位数。其实准确的说是保留值将保留到离上一位更近的一端。 1.保留整数只有一个小数时:4舍6入5看齐,奇进偶不进 2.保留整数或小数超过一个小数时:看保留位的下下位是否存在 |
math.sqrt(x) | 返回数字x的平方根。 |
函数 | 描述 |
---|---|
math.acos(x) | 返回x的反余弦弧度值。 |
math.asin(x) | 返回x的反正弦弧度值。 |
math.atan(x) | 返回x的反正切弧度值。 |
math.atan2(y, x) | 返回给定的 X 及 Y 坐标值的反正切值。 |
math.cos(x) | 返回x的弧度的余弦值。 |
math.sin(x) | 返回的x弧度的正弦值。 |
math.tan(x) | 返回x弧度的正切值。 |
math.degrees(x) | 将弧度转换为角度,如degrees(math.pi/2) , 返回90.0 |
math.radians(x) | 将角度转换为弧度 |
常量 | 描述 |
---|---|
math.pi | 数学常量 pi(圆周率,一般以π来表示) |
math.e | 数学常量 e,e即自然常数(自然常数)。 |
3.随机数
import random
函数 | 描述 |
---|---|
random.choice(seq) | 从序列的元素中随机挑选一个元素,比如random.choice(range(10)),从0到9中随机挑选一个整数。 |
random.randrange (start, stop,step) | 从指定范围内,按指定基数递增的集合中获取一个随机数,基数默认值为 1 |
random.random() | 随机生成下一个实数,它在[0,1)范围内。 |
random.shuffle(list) | 将序列的所有元素随机排序,修改原list |
uniform(x, y) | 随机生成实数,它在[x,y]范围内. |
4.Range函数
-
作用
用来生成一个能够得到一系列整数的可迭代对象(也叫整数序列生成器)
-
调用格式
range(stop) # stop 停止整数 range(start, stop) # start 开始整数 range(start, stop, step) # step 步长
range 函数调用会生成从 start 开始,到 stop 结束(不包含stop) 的一系列整数,整数的间隔 step
start 默认值为0, step 默认值为1
-
示意
range(4) # 生成 0 1 2 3 range(3, 6) # 生成 3 4 5 range(1, 10, 2) # 生成 1 3 5 7 9 range(5, 0, -2) # 生成 5 3 1 range(len(list)) # 列表长度作为参数
5.Continue语句
-
作用
-
用于循环语句(while 语句和for语句)中, 不再执行本次循环内 continue 之后的语句,开始一次新的循环
-
-
说明
-
在for 语句中, 执行continue 语句,for语句将会从可迭代对象向中获取下一个元素绑定变量后再次进行循环
-
在while 中,执行continue 语句, 将会直接跳转到while 语句的真值表达式处,重新判断循环条件。
-
-
示例
for x in range(5): if x % 2 == 0: continue print(x) # 1 3
6.容器
python 中默认有4种可变的容器
-
列表list
-
字典 dict
-
集合 set
-
字节数组 bytearray
容器都是可迭代对象, 可以用for 语句来遍历容器
(1).列表
-
列表的运算
列表list同字符串str都是序列, 他们的运算规则基本相同
-
+ 用于拼接列表
>>> [1, 2, 3] + [4, 5, 6] # [1, 2, 3, 4, 5, 6]
-
+= 追加
语法
列表 += 可迭代对象
>>> L = [1, 2, 3] >>> L += [4, 5] # L = [1, 2, 3, 4, 5] >>> L = [1, 2, 3] >>> L += "ABC" # L = [1, 2, 3, 'A', 'B', 'C'] >>> L += range(2)
-
* 用于生产重复的列表
>>> [1, 2] * 3 # [1, 2, 1, 2, 1, 2] >>> L = [5, 6] >>> L *= 3 # L = [5, 6, 5, 6, 5, 6]
-
== != 用于比较
>>> [1, 2, 3] == [1, 2, 3] # True >>> [1, 2, 3] != [3, 2, 1] # True
-
in /not in 用于判断一个数据元素是否在列表中
>>> "hello" in [1, "hello", 'world'] True >>> '红楼梦' in ['三国演义', '西游记'] False
-
-
增删改查
增
方法名(L代表列表) | 说明 |
---|---|
L.append(x) | 向列表的末尾追加单个数据 |
L.insert(index, obj) | 将某个数据obj 插入到 index这个索引位置的数据之前 |
L.extend(可迭代对象) | 等同于: L += 可迭代对象 |
mylist1 = [1, 3, 4] # 目标是变成 [1, 2, 3, 4, 5] mylist1.append(5) # mylist1 = [1, 3, 4, 5] mylist1.insert(1, 2) # mylist1 = [1, 2, 3, 4, 5] mylist1.extend(range(6, 10)) # mylist1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
删
方法 | 说明 |
---|---|
L.remove(x) | 从列表L中删除第一次出现在列表中的数据元素,如果x不存在则报错 |
L.clear() | 清空列表 |
L = [1, 2, 3, 4, 2, 2, 3, 4] L.remove(3) # L = [1, 2, 4, 2, 2, 3, 4] L.remove(3) # L = [1, 2, 4, 2, 2, 4] L.remove(3) # 报错了 L.clear() # L = []
del 语句删除指定位置的数据元素
del 变量名 # 删除变量,同时解除变量绑定的对象 del 列表[整数表达式]
L = ['张飞', '赵云', '鲁班7号', '孙悟空'] del L[2] # L = ['张飞', '赵云', '孙悟空'] del L # 删除 L 变量
改
用索引赋值可以改变列表内的数据
列表[整数表达式] = 表达式
mylist2 = [1, 1.99, 3] # 把1.99 改为2 mylist2[1] = 2 # mylist2 = [1, 2, 3]
查(索引取值就是查看)
-
列表常用API
序号 函数 1 len(list)列表元素个数 2 max(list)返回列表元素最大值 3 min(list)返回列表元素最小值 4 list(seq)将元组转换为列表 -
列表常用方法
运算 结果 s.index(x[, i[, j]])
x 在 s 中首次出现项的索引号(索引号在 i 或其后且在 j 之前) s.count(x)
x 在 s 中出现的总次数 s.append(x)
将 x 添加到序列的末尾 (等同于 s[len(s):len(s)] = [x]
)s.clear()
从 s 中移除所有项 (等同于 del s[:]
)s.copy()
创建 s 的浅拷贝 (等同于 s[:]
)s.extend(t)
或s += t
用 t 的内容扩展 s (基本上等同于 s[len(s):len(s)] = t
)s.insert(i, x)
在由 i 给出的索引位置将 x 插入 s (等同于 s[i:i] = [x]
)s.pop([i])
提取在 i 位置上的项,并将其从 s 中移除 s.remove(x)
删除 s 中第一个 s[i]
等于 x 的项目。s.reverse()
就地将列表中的元素逆序。 s.sort( key=None, *reverse=False*)
对列表内的数据进行排序, reverse=False 升序排序,否则是降序排序
(2).元组
-
元组是不可改变的列表
-
同列表list 一样,元组可以存放任意类型的数据
-
但是,一旦创建将不可修改
-
元组使用小括号 ( ),列表使用方括号 [ ]
增删改查
-
增,改
元组不可改变
-
删
元组中的元素值是不允许删除的,但我们可以使用del语句来删除整个元组
-
查
元组与字符串类似,下标索引从 0 开始,可以进行截取,组合等。
元组常用API
序号 | 方法 | 描述 |
---|---|---|
1 | len(tuple) | 返回元组中元素个数。 |
2 | max(tuple) | 返回元组中元素最大值。 |
3 | min(tuple) | 返回元组中元素最小值。 |
4 | tuple(list) | 将列表转换为元组。 |
元组常用方法
运算 | 结果 |
---|---|
s.index(x[, i[, j]]) | x 在 s 中首次出现项的索引号(索引号在 i 或其后且在 j 之前) |
s.count(x) | x 在 s 中出现的总次数 |
(3).字典
-
字典是一种可变容器模型,且可存储任意类型对象。
-
字典的数据都是以键(key)-值(value)对的形式进行映射存储.
-
字典的每个键值对( key:value )用冒号分割,每个对之间用逗号分割,整个字典包括在花括号 {} 中
-
d = {key1 : value1, key2 : value2, key3 : value3 }
-
字典的数据是无序的
-
字典的键不能重复,且只能用不可变类型作为字典的键
-
字典中的数据只能用"键"key 进行索引,不能用整数进行索引
增删改查
-
增,改
字典[键key] = 表达式
键不存在, 会创建键并绑定键对应的值
键存在, 会改变键对应的值示例:
d = {} d['name'] = 'tarena' # 添加键值对 d = {'name': 'tarena'} d['age'] = 18 # d = {'name': 'tarena', 'age': 18} d['age'] = 19 # 改变 'age' 键对应的值 d = {'name': 'tarena', 'age': 19}
-
查
字典的键索引
字典[键key]
用键索引可以查看字典中的数据
d = {'one': 1, 'two': 2} print(d['two'])
如果用字典里没有的键访问数据,会输出错误
mydic = {'Name': 'hqyj', 'Age': 7, 'Class': 'First'} print (mydic['Alice'])
in / not in 运算符
用 in 可以判断一个键是否存在于字典中,如果存在返回 True, 否则返回 False,not in 与 in 相反
-
删
能删单一的元素也能清空字典,清空只需一项操作
显式删除一个字典用del命令
del 字典[键]
mydic = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'} del mydic['Name'] # 删除键 'Name' mydic.clear() # 清空字典 print (mydic['Age']) print (mydic['School']) del mydic # 删除字典
-
字典的特性
字典值可以是任何的 python 对象,既可以是标准的对象,也可以是用户定义的,但键不行。
1)不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住
2)键必须不可变,所以可以用数字,字符串或元组充当,而用列表等就不行
注: python 中有四种可变类型
-
列表 list
-
字典dict
-
集合 set
-
字节数组 bytearray
-
字典常用API
序号 函数 描述 1 len(dict) 计算字典元素个数,即键的总数。 2 str(dict) 输出字典,可以打印的字符串表示。 3 type(variable) 返回输入的变量类型,如果变量是字典就返回字典类型。 -
字典常用方法
序号 函数及描述 1 dict.clear()删除字典内所有元素 2 dict.copy()返回一个字典的浅复制 3 dict.fromkeys(seq)创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值 4 dict.get(key, default=None)返回指定键的值,如果键不在字典中返回 default 设置的默认值 5 key in dict如果键在字典dict里返回true,否则返回false 6 dict.items()以列表返回一个视图对象 7 dict.keys()返回一个视图对象 8 dict.setdefault(key, default=None)和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default 9 dict.update(dict2)把字典dict2的键/值对更新到dict里 10 dict.values()返回一个视图对象 11 pop(key,default)删除字典 key(键)所对应的值,返回被删除的值。 12 popitem()返回并删除字典中的最后一对键和值。
(4).列表,元组,字典总结
-
列表和元组是有序的,字典的存储是无序的
-
列表、字典是可变的,元组是不可变的
-
字典的键索引速度快,列表的索引速度也快
d = {'a':1, 'b':2, .........} print(d['c']) # 速度快 L = [7, 5, 1, ........] print(L[10009]) # 速度快
-
列表和元组是顺序存储的,字典是散列存储的
-
字典的 in / not in 运算符快于列表的 in / not in 运算符
L = ['孙悟空', '赵云', '吕布', ...] if '王昭君' in L: # 速度慢 pass D = {'孙悟空':'花果山', '赵云':'长山', '吕布':'石家庄', .....} if '王昭君' in D: # 速度快 pass
(5).集合
-
集合是可变的容器,固定集合是不可变的集合
-
集合相当于只有键没有值的字典
-
集合是无序的不重复元素的存储结构
-
集合内的数据都是唯一的,不可变的
集合的创建
-
创建集合的方式
空集合 set()
非空集合 用 {} 括起来,值用逗号分隔开
s = set() # 用函数空集合 s = {1, 2, 3, 4} # 创建非空集合的字面值 s = set(range(5)) # 调用 set(可迭代对象) 来创建集合 s = {0, 1, 2, 3, 4} s = set("ABC") # s = {'B', 'C', 'A'} s = set("ABCCCCCCC") # s = {'B', 'C', 'A'} s = set(['ABC']) # s = {'ABC'} 使用 set()函数从列表创建集合 s = set((4, 5, 6, 7))# 使用 set()函数从元组创建集合
-
创建固定集合frozensets的方式
fs = frozenset() # 空固定集合 fs = frozenset() fs = frozenset([1, 2, 3]) # fs = frozenset({1, 2, 3})
注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
集合的数据操作
-
添加元素
将元素 x 添加到集合 s 中,如果元素已存在,则不进行任何操作。
s.add( x ) 添加元素到集合
s.update( x ) 添加元素到集合,且参数可以是列表,元组,字典等 ,x 可以有多个,用逗号分开
s1 = set((4, 5, 6, 7)) s1.add(100) print(s1) s1.update([200,300]) print(s1)
-
删除元素
s.remove( x ):将元素 x 从集合 s 中移除,如果元素不存在,则会发生错误。
s.discard( x )):将元素 x 从集合 s 中移除,如果元素不存在,不会发生错误。
s.pop()):对集合进行无序的排列,然后将这个无序排列集合的左面第一个元素进行删除。
注意:集合(set)没有索引查看的功能。集合是一种无序、不可重复的数据结构,用于存储唯一的元素。由于集合是无序的,所以不能通过索引来访问其中的元素。所以也没有对应的修改功能。
-
集合常用API
方法 | 描述 |
---|---|
add() | 为集合添加元素 |
clear() | 移除集合中的所有元素 |
copy() | 拷贝一个集合 |
difference() | 返回多个集合的差集 |
difference_update() | 移除集合中的元素,该元素在指定的集合也存在。 |
discard() | 删除集合中指定的元素 |
intersection() | 返回集合的交集 |
intersection_update() | 返回集合的交集。 |
isdisjoint() | 判断两个集合是否包含相同的元素,如果没有返回 True,否则返回 False。 |
issubset() | 判断指定集合是否为该方法参数集合的子集。 |
issuperset() | 判断该方法的参数集合是否为指定集合的子集 |
pop() | 随机移除元素 |
remove() | 移除指定元素 |
symmetric_difference() | 返回两个集合中不重复的元素集合。 |
symmetric_difference_update() | 移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中。 |
union() | 返回两个集合的并集 |
update() | 给集合添加元素 |
len() | 计算集合元素个数 |
(6).容器总结
类型:
-
列表 list
-
元组 tuple
-
字典 dict
-
集合 set / 固定集合 frozenset
可变容器:list
,dict
,set
不可变容器:tuple
,frozenset
有序:list
, tuple
无序:dict
, set
, frozenset