【10月更文挑战第10天】
集合的概念以及定义(包括空集合)
集合的定义:{元素1,元素2.......}
i={1,5,6}
print(type(i))
#<class 'set'>
那么空集合该怎么进行使用呢?
如果我们光写一个花括号的话,那么这个是不是就能表示空集合呢?
答案是不能的
q={}
print(type(q))
#<class 'dict'>
最后打印出来的类型是一个字典
所以说一个空的花括号表示的是字典
其实空集合的创建是set()
o=set()
print(type(o))
#<class 'set'>
所以set就是集合的表示方式
创建空集合一定要使用set()
集合的特点
1.集合是和字典是一样的,元素是没有顺序的
所以我们在打印集合的时候打印出来的数据的顺序都是随机的
2.集合内的元素都是唯一的
如果我们在定义集合元素的时候有多个相同的元素的话,那么我们在打印的时候指只会保留一个
j={1,2,3,'hu',5,6,1,5}
print(j)
#{1, 2, 3, 5, 6, 'hu'}
所以集合是无序不重复的散列
集合的操作
1.去重:利用集合的特点---元素是唯一的
#对列表进行去重的操作
li=[12,56,89,56,16]
#将列表转换为集合的类型
j2=set(li)
print(j2)
#{56, 89, 12, 16}
#然后将集合转换为列表,然后这个列表就完成了去重的操作了
li=list(j2)
print(li)
如果一个列表需要进行去重的话,我们就可以将这个列表转换为集合然后进行去重的操作
2.修改
对于集合的话我们是没有直接的修改的操作的
我们只能先删除再添加
3.添加
3.1 add(元素)---添加元素到集合中
我们说加什么add就加什么,不会做额外的操作
#添加操作
j={1,2,3,'hu',5,6,1,5}
j.add("你好啊")
print(j)
#{1, 2, 3, 'hu', 5, 6, '你好啊'}
3.2 upodate(序列/散列)
这个函数会将我们输入的要添加的序列或者是散列给拆分了
#添加序列的话
#update(序列/散列)
j.update("你好")
print(j)
#{1, 2, 3, 5, 6, 'hu', '你', '好', '你好啊'}
#可以发现我们后面输入的被拆开了
#将我们输入的序列或者是散列类型的数据拆开放到集合中
括号内是不能够写数字的,会报错,因为括号内只能写序列和散列
4.删除
4.1remove(指定元素)
我们是需要指定值进行操作的
j={1,2,3,'hu',5,6,1,5}
j.remove("hu")
print(j)
#{1, 2, 3, 5, 6}
j.remove(5)
print(j)
#{1, 2, 3, 6}
4.2pop()---删除随机元素
之所以删除随机元素,因为数据的位置都是随意变动的
#{1, 2, 3, 6}
j.pop()
print(j)
#{2, 3, 6}
5.交集、并集
只有集合里面存在这个概念
5.1交集----- &
取出两个集合中相同的内容
a={1,2,3,4}
b={3,4,5,6}
print(a&b)
#{3, 4}
5.2并集----- |
两个集合合并在一起
a={1,2,3,4}
b={3,4,5,6}
print(a|b)
#{1, 2, 3, 4, 5, 6}
集合中每个数据都是唯一的
那么出现的两个3和两个4最后都只保留了一个
要遵循集合的规则
至此,我们的数据类型就学完了
运算符的优先级
|运算符|描述
|
|-|-|
||幂运算|
|+、-|一元运算符(正负号)|
|、/、%|算术运算符(乘、除、取余)|
|+、-|(加减)|
|<、>、<=、>=|比较运算符|
|==、!=||
|=、%=、/=、-=、+=、=、=|赋值运算符
|
|is、is not|身份运算符|
|in、not in|成员运算符|
|not > and > or|逻辑运算符|
赋值元素符就是左右两边的内容进行指定的算术运算再将结果赋值给左边的变量
成员运算符
成员运算符有两个:in not in
成员运算符在序列和散列居多
主要是判断某个内容在这一堆是否存在
使用格式:数据 in 序列/散列
判断数据是不是序列/散列的成员
成员运算符的使用
#判断字符p是不是python的成员
print('p'in'pyhton')
#True
li=['李四''张三''王二']
if "小明" in li:#判断小明在不在名字列表里面
print(True)
else:
print(False)
#False
#判断字符q是否不是python的成员
print('q'not in'pyhton')
#not in 的操作就是和in的操作是相反的
身份运算符
看的是你引用的是不是同一块内存空间的内容
is判断两个内容是不是同一个地址
is not相反
a=1
b=a
c=2
print(a is b)#True
#a和b指定同一块空间
print(a is c)#False
#a和c不指向同一块空间
print(f'a:{id(a)}')
print(f'b:{id(b)}')
print(f'c:{id(c)}')
#a:1535758792
#b:1535758792
#c:1535758808
#可见, 我们通过id()这个函数我们就能看的出a和b二档地址与c是不同的
#is判断两个内容是不是同一个地址
#is not相反
使用id()能查看数据的地址
可变复制---copy()
在进行重要数据的赋值之前
我们需要对这个数据进行一个拷贝复制,因为这个数据一但被修改了就不能回复了
所以我们需要提前将这个数据进行复制一下
对于可以修改的数据类型,之前的数据就没有了
且不能恢复
如果想保留修改之前的数据
我们需要提前备份一份数据
我们需要使用到copy()函数
copy()函数的使用方式:
li=[1,2,3,4,5]
print(id(li))#72456872
li1=li.copy()
print(li1)
#[1, 2, 3, 4, 5]
print(id(li1))#72456840
我们使用copy去备份数据的时候,copy会去额外申请一个空间去放这个备份的数据
备份类型直接对于只能修改的类型
列表、字典、集合
如果我们是想通过赋值来达到备份的效果,这个是不可能的
因为我们赋值出来的对象与原先的对象都指向着同一块空间的
那么我们将原先对象进行改变,那么备份的对象也会被改变,因为都指向同一块空间
所以我们需要copy()来专门进行备份的操作
通过copy会额外申请一块空间