【python基础02】 序列,元组,列表,字典,位运算

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中的无序可变类

[内置类型 — Python 3.12.4 文档]

  • .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()也是浅拷贝

  • 24
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值