三元运算
三元运算(三目运算),是对简单的条件判断语句的缩写。
格式:
a = 值1 if 条件 else 值2
例子:
user = input("请输入名字:")
a = "成功" if user == "dyq" else "失败"
print(a)
如果条件成立,值1赋值给变量a,如果条件不成立,值2复制给变量a。
set集合
set可以看做是一个类似于字典的集合,只是set没有value只有key,且set的元素不允许重复。简单来说set就是一个只有key的不允许元素重复的字典。set集合多用在统计不重复内容上。
创建set
s1 = set() #可以加set创建
s2 = {11,22,33,44} #可以直接用字典的方式创建
print(s1,"\n", s2)
转换
a = (11,22,33,44,44)
b = [11,22,55,33,43]
c = "1233"
s1 = set(a)
print(s1)
{33, 11, 44, 22} #转换以后元组重复的内容会自动去掉,格式也会变成字典的格式
s2 = set(b)
print(s2)
{33, 11, 43, 22, 55} #列表格式变化,去重复值
s3 = set(c)
print(s3)
{'3', '2', '1'} #变格式,去重复
set类型里的方法
set和其他类型的集合一样有自己的内置方法
- .add:向set集合中添加内容
s1.add("da")
s1.add("da", "dda") #如果添加两次相同的元素,set集合不允许重复
print(s1)
{'dda', 'da'}
- .difference:查找a中存在b里不存在的内容,用变量把这些不同的内容赋值给一个新的变量。通俗讲就是 a 里面有 b里面没有的内容,提取出来。
b = {11,66,33,44}
a = {55,33,44}
dif = a.difference(b)
print(dif)
{55} #从结果可以看出方法的作用,就是找出a面有但b里面没有的元素
dif = b.difference(a) #找出b里面有a里面没有的内容
print(dif)
{66, 11}
- .difference_update:找到a里面有b里面没有的元素,找到后赋值给a
b = {11,66,33,44}
a = {55,33,44}
a.difference_update(b)
print(a)
{55} #a被重新赋值为找出来的b里面没有的元素
b.difference_update(a) #找到b里面有a里面没有的元素再赋值给b
print(b)
{66, 11}
- .clear():清空
b.clear()
print(b)
- .discard( ):移除
b.discard(22)
print(b)
{33, 66, 11, 44} #discard如果删除列表中没有的内容时不会报错,这也是它的一个特性
- .remove():移除
b.remove(22)
print(b)
remove如果指定一个集合中没有的元素时,会报错
- .intersection:交集,将两个参数中有交集的元素定义给另一个变量
b = {11,66,33,44}
a = {55,33,44}
ret = b.intersection(a) #a,b的位置对调也可以
print(ret)
{33, 44}
- .intersection_update():将a与b的交集定义给a
b = {11,66,33,44}
a = {55,33,44}
b.intersection_update(a)
print(b)
{33, 44}
a.intersection_update(b) #将两个set的交集赋值给哪个set完全取决于哪个在方法的前面。
print(a)
- .isdisjoint():查看两个set集合中有没有交集,如果有返回False,如果没有返回True
ret = a.isdisjoint(c)
print(ret)
- .issubset():判断b是不是a的子序列,如果是返回True,如果不是返回False
a = {11,66,33,44}
b = {33,44}
ret = b.issubset(a)
print(ret)
True
- .issuperset():判断a是不是b的父序列,如果是返回True,如果不是返回False
ret = a.issuperset(b)
print(ret)
- .pop():随机移除一个元素,可以赋值给一个变量,移除时没有规律
b = {"a", "b", 12, 3}
b.pop()
print(b)
- .symmetric_difference():对称交集,把a和b不重合的元素赋值给新变量
a = {11,66,33,44}
b = {33,44, 55, 66}
atr = a.symmetric_difference(b)
print(atr)
{11, 55}
- .symmetric_difference_update:对称交集,把a和b不重合的元素赋值给a
a.symmetric_difference_update(b)
print(a)
{11, 55}
- .union:并集,把a和b所有元素合并,如果有重复的会去重
a = {11,66,33,44}
b = {33,44, 55, 66}
ret = a.union(b)
print(ret)
{33, 66, 11, 44, 55}
- .update:更新,把列表a的内容更新到b集合里面,会自动去重
a = [33,55,11,22]
b = {33,44, 55, 66}
b.update(a)
print(b)
{33, 66, 11, 44, 22, 55}
深浅拷贝
- 数字和字符串
对字符串和数字无论如何copy,其值的内存ID号不会改变,由此我们得出结论:
对于数字和字符串来说,对象不可被修改,只会重新生,所以,赋值和深浅拷贝无意义。
- 赋值
n1 = {"k1": "wu", "k2": 123, "k3": ["alex", 456]}
n2 = n1
变量n1赋值给变量n2时,变量的内存地址不变
- 浅拷贝
在内存中额外创建第一层数据,只创建第一层,其他层不变。
- 深拷贝
深拷贝就是把集合里的所有内容全部拷贝一遍,所有内容的ID跟原来的都不相同。
深浅拷贝主要是一个概念问题,操作完全在内存中进行。