python运算符
- 位运算符
- & :按位与
- | :按位或
- ^ :按位异或
- ~ :按位取反
- << :左移位
- >> :右移位
x = 0b11000110
y = 0b10100101
print(bin(x&y)) # 0b0010
print(bin(x|y))
print(bin(x^y))
print(bin(~x)) # 第一位是表示正负
print(bin(x>>2)) # 去除右边两位
print(bin(x<<2)) # 右边增加两位
'''
0b10000100
0b11100111
0b1100011
-0b11000111
0b110001
0b1100011000
'''
- 赋值运算符
- = 赋值
- += a += b >>> a = a+b 加法赋值
- -= 减法赋值
- *= 乘法赋值
- /= 除法赋值
- %= 取余
- **= 幂
- //= 整除
- 优先级 括号,索引切片,乘方,正负,按位或~ not ,乘除,加减,移位>> ,或&,异或,或,比较,赋值
数学函数
常用数学函数 使用自带的库math
- abs() 绝对值
- ceil() 向上取整 整数
- max() 最大值
- min() 最小值
- pow() 乘方
- sqrt() 平方根
- exp() e的幂次方
随机数
使用random库
- randint() 指定范围随机整数
- random() 0-1随机小数
- choice() 从序列中随机选一个元素
- seed() 随机种子,设置之后保证每次的随机数相同
- shuffle() 打乱,修改原序列
三角函数
math库中的内置三角函数
- sin() cos() tan() cot() 三角函数
- acos() asin() atan() 反三角函数
- degrees() 弧度值转化为角度°值
- randians() 角度变弧度
数学常量
math库中内置
- pi 圆周率
- e自然底数
条件语句
- if-elif-else 满足if或者elif后面的条件判断语句就会执行,都没有满足则执行else,elif可以有多个
- while 无限循环 while后的条件判断为真则一直执行
- break 打破循环,跳出break所在的循环体
- continue 跳过本次循环 进行下一次循环,continue 后面的语句不执行
- for 配合可迭代对象进行使用range() 和列表等序列
- range() 返回一个可迭代对象 star,end,stp
- pass 占位使用,不执行任何效果
print([i for i in range(5,1,-1)])# [5, 4, 3, 2]
# if-elif-else 是一个代码块,只能执行其中一个关键词后的语句
# break只能跳出当前循环,不能跳出外层的循环
python序列
python中有三种基本的序列类型 list tuple range,字符串,元组也是序列类型,序列类型都可以使用for进行遍历
序列类型可以进行以下操作
- 运算
- in,not in 判断是否在序列中
- +同类型的序列合并
- *复制
- []进行切片索引 [][][i]索引 [i:j] [i:j:s] 切片
- len() 长度
- min(),max() 最大值 最小值
- .index() 返回索引
- .count() 统计指定元素的数量
- 不可变序列类型 字符串 元组
- 可变序列类型 列表 集合,不能作为字典的键
- 可以使用[] 的索引切片的浅拷贝操作进行修改可变序列的值
- 可以使用del删除部分值
- .append() 添加元素
- .clear() 清空
- .copy() 浅拷贝
- .insert() 指定位置插入
- .remove() 删除指定位置的元素
- .reverse() 逆序
li = [1,2,3]
li2 = li.copy()
li3 = li[:]
print(id(li2),id(li3),id(li))
# 2416511275392 2416513941440 2416511277312
li = [[1, 2], 3]
li2 = li.copy()
li3 = li[:]
li[0].append(4) # [[1, 2, 4], 3] [[1, 2, 4], 3]a
print(li2,li3)
'''
在这个例子中,li2 和 li3 都是 li 的浅拷贝。在 Python 中,列表的浅拷贝意味着新列表包含了旧列表中元素的副本。由于列表中的元素都是不可变对象(整数),所以这种拷贝已经是足够深的,即它实际上就是一种深拷贝的效果。
'''
-
列表list()
-
使用[] 标识
-
.sort() 对原列表中的元素进行排序 reverse=True 降序 否则为升序
-
**sorted()**返回排序后的列表
-
推导式 可以根据条件直接生成列表
- [el for el in {迭代对象} if {条件}]
-
li = [2,3,4,1]
li.sort(reverse = True)
print(li) # [4, 3, 2, 1]
print(sorted(li,reverse=False)) #[1, 2, 3, 4]
print([el for el in range(10) if el%2 == 0])#[0, 2, 4, 6, 8]
- 元组 tuple()
- 使用() 标识
- 不可变序列类型
print(tuple([1])) # (1,)
python 字典dict
- 字典是可变容器 映射类型
- 推导式{key:values for key,values in {可迭代对象iter} if {条件}}
- key:vlues 的形式存储
- 无序,不能使用下标索引,区别于序列
- list() 返回字典中的键列表
- **len()**键值对的数量
- dict[key] 映射字典中的值
- d[key] = value 键赋值,不存在则创建
- del **d[key] ** 删除键值对
- in,not in 判断是否存在
- **clear() ** 清除
- **copy() ** 浅拷贝
- items() 返回键值对
- update([other]) 更新字典 覆盖原有的键
- pop(key[, default]) 删除并返回值,不存在返回默认值,没有默认值报错
- get() 获取值,没有返回默认值,默认值默认为None
集合set
python中的无序可变类
- .add() 添加元素
- .update() 添加元素
- **.remove() ** 移除元素
- **.pop() ** 随机删除元素
- 推导式{el for el in iter {条件}}
深拷贝、浅拷贝
li1 = [1,2,3] # 只有数字
li2 = [li1,22,33] # 包含对象,深层嵌套
# li = li1 # 没有创建新的对象,只是对原来的列表进行引用
# print(id(li1)==id(li1)) # True 同一个内存地址 只是引用
# 浅拷贝 深拷贝
# 切片 copy()方法是浅拷贝
# 浅拷贝和深拷贝都是创建了一个新的对象,
# 开辟出新的内存储存原数据,不是对原数据的引用
# import copy
# li_deep = copy.deepcopy(li1)
# li_no_deep = li1[:]
# print(id(li1),id(li_deep),id(li_no_deep))
# 2280558942464 2280560412544 2280560513408 地址不同
# 浅拷贝只是复制对象本身,不复制嵌套对象
# 嵌套对象只是复制其引用
# 修改嵌套对象会改变原对象中的嵌套对象
# li = li2.copy()
# li[0][0] = 'aaa'
# print(li,li2) #[['aaa', 2], 22, 33] [['aaa', 2], 22, 33]
# 深拷贝
# 复制所有嵌套对象,修改不会导致原对象的改变 递归复制每一个元素
# import copy
# li = copy.deepcopy(li2)
# li[0][0] = 'aaa'
# print(li2,li) [[1, 2], 22, 33] [['aaa', 2], 22, 33]
索引切片都是浅拷贝,copy()也是浅拷贝
标签:02,copy,python,li,序列,li2,print,拷贝,元组 From: https://blog.csdn.net/m0_73658021/article/details/140698136