Python学习笔记6——集合

1、关于集合
集合与列表、字典一样都是可变序列
集合是没有值value的字典

2、集合的创建
2.1 第一种创建方式:使用{}

s = {2,3,4,5,5,6,7,7}     #集合不允许重复,它会把重复的元素去掉
print(s)

输出结果:
{2, 3, 4, 5, 6, 7}

2.2 第二种创建方式:使用set()

s1 = set(range(6))
print(s1,type(s1))

输出结果:
{0, 1, 2, 3, 4, 5} <class ‘set’>

s2 = set([1,2,4,5,5,5,6,6])   #将列表转换为集合
print(s2,type(s1))

输出结果:
{1, 2, 4, 5, 6} <class ‘set’>

s3 = set((1,2,4,5,5,6,6,65))    #将元组转换为集合   #集合元素是无序的
print(s3,type(s1))

输出结果:
{1, 2, 65, 4, 5, 6} <class ‘set’>

s4 = set({15,22,74,25,25,6,6})  #将集合转换为集合
print(s4,type(s4))

输出结果:
{6, 22, 25, 74, 15} <class ‘set’>

s5 = set('python')     #集合元素是无序的
print(s5,type(s5))

输出结果:
{‘o’, ‘n’, ‘h’, ‘y’, ‘t’, ‘p’} <class ‘set’>

从以上结果可以看出,集合元素是无序的

3、定义一个空集合

s6 = {}       #是dict字典类型
print(s6,type(s6))    #{}定义出来的是字典,不可以直接使用花括号{}定义空集合

输出结果:
{} <class ‘dict’>

从输出结果可以看出,用花括号{}定义的是字典类型,因此不能用花括号{}直接定义集合
定义集合与前面所讲的列表、字典、元组不同,只有一种方法,就是使用内置函数set()

s7 = set()    #这样才可以定义一个空集合
print(s7,type(s7))

输出结果:
set() <class ‘set’>

4、集合的相关操作
4.1 集合元素的判断操作

s = {10,20,30,405,60}
print(10 in s)
print(10 not in s)
print(100 in s)
print(100 not in s)

输出结果:
True
False
False
True

4.2 集合元素的新增操作
4.2.1 调用add()方法,一次添加一个元素(无序地添加到集合中,不一定在末尾)

#调用add()方法,一次添加一个元素
print(s)
s.add(80)
print(s)    #无序的添加到集合中

输出结果:
{10, 20, 405, 60, 30}
{10, 80, 20, 405, 60, 30}

4.2.2 调用update()方法,至少添加一个元素(即,可添加多个元素)

#调用update()方法,至少添加一个元素(可添加多个元素)
print(s)
s.update([45,23,89])
print(s)

输出结果:
{10, 80, 20, 405, 60, 30}
{10, 45, 80, 20, 405, 23, 89, 60, 30}

print(s)
s.update((46,25,45))
print(s)

输出结果:
{10, 45, 80, 20, 405, 23, 89, 60, 30}
{10, 45, 46, 80, 20, 405, 25, 23, 89, 60, 30}

4.3 集合元素的删除操作
4.3.1 调用remove()方法
一次删除一个指定元素,如果指定的元素不存在抛出KeyError

#调用remove()方法,一次删除一个指定元素,如果指定的元素不存在抛出KeyError
print(s)
s.remove(405)
print(s)
#s.remove(100)  #不存在100,抛出异常 KeyError: 100

输出结果:
{10, 45, 46, 80, 20, 405, 25, 23, 89, 60, 30}
{10, 45, 46, 80, 20, 25, 23, 89, 60, 30}

4.3.2 调用discard()方法
一次删除一个指定元素,如果指定的元素不存在不会抛出异常

#调用discard()方法,一次删除一个指定元素,如果指定的元素不存在不会抛出异常
print(s)
s.discard(100)   #不会抛出异常
print(s)

输出结果:
{10, 45, 46, 80, 20, 25, 23, 89, 60, 30}
{10, 45, 46, 80, 20, 25, 23, 89, 60, 30}

4.3.3 调用pop()方法
一次只删除一个任意元素(删谁不知道)

#调用pop()方法,一次只删除一个任意元素(删谁不知道)
print(s)
s.pop()
print(s)
s.pop()
print(s)
#s.pop(25)     #报错,pop不能指定参数  TypeError: pop() takes no arguments (1 given)

输出结果:
{10, 45, 46, 80, 20, 25, 23, 89, 60, 30}
{45, 46, 80, 20, 25, 23, 89, 60, 30}
{46, 80, 20, 25, 23, 89, 60, 30}

4.3.4 clear()清空
清空所有元素

#clear()清空
s.clear()
print(s)

输出结果:
set()

5、集合间的关系
5.1 两个集合是否相等:元素相同就相等

#两个集合是否相等:元素相同就相等
s = {10,20,30,40}   #元素的内容相同,集合就相等
s2 = {30,40,10,20}
print(s==s2)
print(s!=s2)

输出结果:
True
False

5.2 一个集合是否是另一个集合的子集 —— issubset()方法

#一个集合是否是另一个集合的子集
s1 = {10,20,30,40,50,60}
s2 = {10,20,30}
s3 = {10,20,90}
print(s2.issubset(s1))    #意思是s2是s1的子集吗
print(s3.issubset(s1))

输出结果:
True
False

5.3 一个集合是否是另一个集合的超集 —— issuperset()方法
如果B是A的子集,那么A就是B的超集

#一个集合是否是另一个集合的超集
#如果B是A的子集,那么A就是B的超集
s1 = {10,20,30,40,50,60}
s2 = {10,20,30}
s3 = {10,20,90}
print(s1.issuperset(s2))   #意思是s1是s2的超集吗
print(s1.issuperset(s3))

输出结果:
True
False

5.4 两个集合是否没有交集 —— isdisjoint()方法

#两个集合是否没有交集
#可以调用isdisjoint判断
print(s2.isdisjoint(s3))    #False 不是没有交集,那就是有交集
s4 = {100,200,300}
print(s2.isdisjoint(s4))    #True 是没有交集,那就是没有交集

输出结果:
False
True

6、集合的数学操作

6.1 交集操作 ——intersection()或 &

s1 = {10,20,30,40}
s2 = {20,30,40,50,60}
#方法一:内置函数intersection
print(s1.intersection(s2))
#方法二:&符号
print(s1 & s2)

输出结果:
{40, 20, 30}
{40, 20, 30}

6.2 并集操作 ——union()或 |

#方法一:内置函数union
print(s1.union(s2))
#方法二:|符号
print(s1 | s2)

输出结果:
{40, 10, 50, 20, 60, 30}
{40, 10, 50, 20, 60, 30}

6.3 差集操作 ——difference()或 -

#就是作减法
print(s1.difference(s2))  #法一
print(s1 - s2)   #法二

输出结果:
{10}
{10}

6.4 对称差集 ——symmetric_difference()或 ^

#两个集合去掉中间重合的30 40 50,就剩10 50 60
print(s1.symmetric_difference(s2))   #法一
print(s1 ^ s2)   #法二

输出结果:
{50, 10, 60}
{50, 10, 60}

7、集合生成式
与列表生成式相同,将[]改为{}即可
没有元组生成式(不可变序列)

#列表生成式
lst = [i*i   for i in range(10)]    #数据是有序的
print(lst)

#集合生成式
s = {i*i   for i inn range(10)}    #数据是无序的
print(s)

输出结果:
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
{0, 1, 64, 4, 36, 9, 16, 49, 81, 25}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值