Python集合

                                                 Python集合的操作

     集合(set)是一个无序的不重复元素序列。集合内的元素是不可变的
集合的目的是将不同的值存放在一起,不同的集合间用来做关系运算,无须纠结于集合中的单个值。

1.创建集合

#直接创建集合
name0 = {1,2,3,'你好','luatao'}
print(name0)
#使用构造函数set()创建集合
name1 = set() #创建空集合
print(name1)
#使用列表创建集合
name2 = ['nihoa',1,2]
name3 = set(name2)
print(name3)

输出结果:

{1, 2, 3, ‘你好’, ‘luatao’}
set()
{‘nihoa’, 1, 2}

2.集合去重

#直接创建集合
name0 = {1,2,3,'你好',2,3,'luatao'}
print('原来的集合:',name0)

输出结果:

原来的集合: {‘luatao’, 1, 2, 3, ‘你好’}

3.访问集合

集合存储的元素是无序且不重复的,因此不能像列表、元组一样通过索引访问集合存储的元素。对集合元素的访问可以使用成员操作符in或not in来判断某元素是否在集合中。

#直接创建集合
name0 = {1,2,3,'你好','luatao'}

print('luatao' in name0)#true
print('luatao' not in name0)#false

输出结果:

True
False

4.添加元素

将元素 x 添加到集合 s 中,如果元素已存在,则不进行任何操作。

#直接创建集合
name0 = {1,2,3,'你好','luatao'}
print('原来的集合:',name0)
#添加单个元素
name0.add('luatao')#元素存在不做任何操作
name0.add('nihao')#元素不存在,加入集合
print('现在的集合:',name0)
#添加多个元素  列表,元组,字典都是一样
name0.update((2,'ada'))#添加一个元组
print('现在的集合:',name0)
name0.update((2,'ada'),(3,4,5))#添加两个元组
print('现在的集合:',name0)

输出结果:

原来的集合: {1, 2, 3, ‘luatao’, ‘你好’}
现在的集合: {1, 2, 3, ‘luatao’, ‘你好’, ‘nihao’}
现在的集合: {1, 2, 3, ‘luatao’, ‘ada’, ‘你好’, ‘nihao’}
现在的集合: {1, 2, 3, 4, 5, ‘luatao’, ‘ada’, ‘你好’, ‘nihao’}

5.删除元素

#直接创建集合
name0 = {1,2,3,'你好',2,3,'luatao'}
print('原来的集合:',name0)

name0.remove('luatao')#移除luatao 不存在会发生错误
print('remove:',name0)

name1 = {1,2,3,'你好',2,3,'luatao'}
name1.discard('luatao')#移除luatao 不存在不会发生错误
print('discard:',name1)

name2 = {1,2,3,'你好',2,3,'luatao'}
name2.pop()#随机移除集合中的一个元素
print('pop:',name2)

name3 = {1,2,3,'你好',2,3,'luatao'}
name3.clear()#删除集合中所有的元素
print('clear:',name3)

输出结果:

原来的集合: {1, 2, 3, ‘luatao’, ‘你好’}
remove: {1, 2, 3, ‘你好’}
discard: {1, 2, 3, ‘你好’}
pop: {2, 3, ‘luatao’, ‘你好’}
clear: set()

6.集合的运算

交集,并集,补集,子集,超集

#直接创建集合
name0 = {1,2,3,'a','b','c'}
name1 = {2,3,4,'b','c'}
print('原来的集合name0:',name0)
print('原来的集合name1:',name1)
#交集 &
name3 = name0 & name1
print('交集:',name3)#name0有,name1也有
#并集 |
name4 = name0 | name1
print('并集:',name4)#全部的元素
#补集 -
name5 = name0 - name1
print('补集:',name5)#name0有但name1没有
#对称补集 ^
name6 = name0 ^ name1
print('对称补集:',name6)#name0有但name1没有和name1没有name0有
#超集 >
#子集 <
print('超集:',name0>name1)# Ture name0是name1的超集
print('子集:',name0<name1)#false name0不是name1的子集

#集合的相等 ==
#集合的不等 !=
print('相等:',name0 == name1)#false
print('不等:',name0 != name1)#true

输出结果:

原来的集合name0: {1, 2, 3, ‘a’, ‘b’, ‘c’}
原来的集合name1: {2, 3, 4, ‘b’, ‘c’}
交集: {‘b’, ‘c’, 2, 3}
并集: {1, 2, 3, ‘a’, 4, ‘b’, ‘c’}
补集: {1, ‘a’}
对称补集: {4, 1, ‘a’}
超集: False
子集: False
相等: False
不等: True

7.不可变集合

嵌套集合的问题在于,集合中通常不能包含集合等可变的值。在这种情况下,你可能希望使用一个不可变集(frozenset)。除了值不可以改变,不可变集和可变集是很相似的。你可以使用「frozenset()」创建一个不可变集。

name0 = frozenset()#创建一个空的固定集合
print(name0)
name1 = frozenset([1,2,3,4])#使用可迭代对象创建固定集合
print(name1)

输出结果:

frozenset()
frozenset({1, 2, 3, 4})
重要的是,你需要记住,不可变集的一个主要的缺点是:由于它们是不可变的,这意味着你不能向其中添加元素或者删除其中的元素。

8.集合内置函数

方法描述
set.add(elmnt)add() 方法用于给集合添加元素,如果添加的元素在集合中已存在,则不执行任何操作。
set.clear()clear() 方法用于移除集合中的所有元素。
set.copy()copy() 方法用于拷贝一个集合。
set.difference(set)difference() 方法用于返回集合的差集,即返回的集合元素包含在第一个集合中,但不包含在第二个集合(方法的参数)中。
set.difference_update(set)difference_update() 方法用于移除两个集合中都存在的元素。difference_update() 方法与 difference() 方法的区别在于 difference() 方法返回一个移除相同元素的新集合,而 difference_update() 方法是直接在原来的集合中移除元素,没有返回值。
set.discard(value)discard() 方法用于移除指定的集合元素。该方法不同于 remove() 方法,因为 remove() 方法在移除一个不存在的元素时会发生错误,而 discard() 方法不会。
set.remove(item)remove() 方法用于移除集合中的指定元素。该方法不同于 discard() 方法,因为 remove() 方法在移除一个不存在的元素时会发生错误,而 discard() 方法不会。
set.pop()pop() 方法用于随机移除一个元素。
set.update(set)update() 方法用于修改当前集合,可以添加新的元素或集合到当前集合中,如果添加的元素在集合中已存在,则该元素只会出现一次,重复的会忽略。
set.union(set1, set2…)union() 方法返回两个集合的并集,即包含了所有集合的元素,重复的元素只会出现一次。
set.intersection(set1, set2 … etc)intersection() 方法用于返回两个或更多集合中都包含的元素,即交集。
set.intersection_update(set1, set2 … etc)intersection_update() 方法用于获取两个或更多集合中都重叠的元素,即计算交集。intersection_update() 方法不同于 intersection() 方法,因为 intersection() 方法是返回一个新的集合,而 intersection_update() 方法是在原始的集合上移除不重叠的元素。
set.symmetric_difference(set)symmetric_difference() 方法返回两个集合中不重复的元素集合,即会移除两个集合中都存在的元素。
set.symmetric_difference_update(set)symmetric_difference_update() 方法移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中。
set.isdisjoint(set)isdisjoint() 方法用于判断两个集合是否包含相同的元素,如果没有返回 True,否则返回 False。。
set.issubset(set)issubset() 方法用于判断集合的所有元素是否都包含在指定集合中,如果是则返回 True,否则返回 False。
set.issuperset(set)issuperset() 方法用于判断指定集合的所有元素是否都包含在原始的集合中,如果是则返回 True,否则返回 False。
name0 = {1,2,'a','b,','luatao',3.3,'卢阿涛'}
print('初始的集合:',name0)

name0.add('ds') #添加一个5,如已存在不执行
print('add:',name0)

name0.clear()#清空元素
print('clear:',name0)

name1 = {1,2,'a','b,','luatao',3.3,'卢阿涛'}
name2 = name1.copy()#拷贝
print('copy:',name2)

name3 = {1,2,3}
name4 = {2,3,4}
print('difference:',name3.difference(name4))#求name3-name4

name5 = {1,2,3,4,5,6}
name6 = {2,3,4,1}
name5.difference_update(name6)
print('difference_update:',name5)#移除两个集合都包含的元素

name7 = {2,3,4,1}
name7.discard(4)#删掉4
print('discard:',name7)#

name8 = {2,3,4,1}
name8.remove(4)#删掉4
print('remove:',name8)#

name9 = {2,3,4,1}
x = name9.pop()#随机删除一个元素
print('弹出的值:',x)
print('pop:',name9)#

name10 = {2,3,4,1}
name11 = ['nihoa','你好',3,4,5]
name10.update(name11)#把name11添加到name10里面去
print('update:',name10)#

name12 = {1,2,'a'}
name13 = {1,3,4,'b'}
name14 = {3,4,'c'}
name15 = name12.union(name13)#两个集合合并
print('union:',name15)
name16 = name12.union(name13,name14)#三个集合合并
print('union:',name16)

name17 = {1,2,'a'}
name18 = {1,3,4,'b'}
name19 = {3,4,'c'}
name20 = name17.intersection(name18)#两个集合求交
print('intersection:',name20)
name21 = name17.intersection(name18,name19)#三个集合求交
print('intersection:',name21)

name22 = {1,2,'a'}
name23 = {1,3,4,'b'}
name24 = {3,4,'c',1}
name22.intersection_update(name23)#两个集合求交
print('intersection_update:',name22)
name22.intersection_update(name23,name24)#三个集合求交
print('intersection_update:',name22)

name25 = {1,2,3,4,5,6}
name26 = {2,3,4,1}
name27 = name25.symmetric_difference(name26)
print('symmetric_difference:',name27)#移除两个集合都包含的元素

name28 = {1,2,3,4,5,6}
name29 = {2,3,4}
name28.symmetric_difference_update(name29)
print('symmetric_difference_update:',name28)#在原始集合 x 中移除与 y 集合中的重复元素,并将不重复的元素插入到集合 x 中:

name30 = {1,2,3,4,5,6}
name31 = {2,3,4}
name32 = name30.isdisjoint(name31)#不包含返回true 包含返回false
print('isdisjoint:',name32)#判断集合 y 中是否有包含 集合 x 的元素:

name33 = {1,2,3,4,5,6}
name34 = {2,3,4}
name35 = name33.issubset(name34)#都包含返回true 否则返回false
print('issubset:',name35)#判断集合 x 的所有元素是否都包含在集合 y 中:

name36 = {1,2,3,4,5,6}
name37 = {2,3,4}
name38 = name36.issuperset(name37)#都包含返回true 否则返回false
print('issuperset:',name38)#判断集合 y 的所有元素是否都包含在集合 x 中:

输出结果:

初始的集合: {1, 2, 3.3, ‘luatao’, ‘a’, ‘b,’, ‘卢阿涛’}
add: {1, 2, 3.3, ‘luatao’, ‘ds’, ‘a’, ‘b,’, ‘卢阿涛’}
clear: set()
copy: {1, 2, 3.3, ‘b,’, ‘卢阿涛’, ‘luatao’, ‘a’}
difference: {1}
difference_update: {5, 6}
discard: {1, 2, 3}
remove: {1, 2, 3}
弹出的值: 1
pop: {2, 3, 4}
update: {1, 2, 3, 4, 5, ‘nihoa’, ‘你好’}
union: {1, 2, 3, 4, ‘b’, ‘a’}
union: {1, 2, 3, 4, ‘a’, ‘c’, ‘b’}
intersection: {1}
intersection: set()
intersection_update: {1}
intersection_update: {1}
symmetric_difference: {5, 6}
symmetric_difference_update: {1, 5, 6}
isdisjoint: False
issubset: False
issuperset: True

吃过饭就来写了,又干了一个多小时。满身大汗,希望值得。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值