Python学习之集合-set

集合(set)是一个无序的不重复元素序列。
可以使用大括号 { } 或者 set() 函数创建集合
注意:

  1. 创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
  2. 集合只能存储不可变数据类型,如果存入一个可变的比如列表,就会报错

创建集合

空集合创建方式

创建空集合只能用set()

st = set()

运行结果:

set()

创建一个元素的集合

st = {
    
    1}
print(st)

运行结果:

{1}

set转换

从list转换成set

li = [1, 2, 'c', 4, 'b', 'a', 1]
st = set(li)
print(st)

运行结果:

{1, 2, 4, 'c', 'b', 'a'}

从tuple转换成set

tu = (1, 2, 'c', 4, 'a', 'b', 1)
st = set(tu)
print(st)

运行结果:

{1, 2, 4, 'c', 'b', 'a'}

从str转换成set

s = 'this is a test'
st = set(s)
print(st)

运行结果:

{'h', 'i', 's', 't', 'a', ' ', 'e'}

从dict转换成set

dt = {
    
    'name': 'tom', 'age': 18}
st = set(dt.items())			# 如果直接是字典名,取的是字典的key
print(st)

dt = {
    
    'name': 'tom', 'age': 18, 'score': 18}
st = set(dt.values())
print(st)

运行结果:

{('name', 'tom'), ('age', 18)}
{'tom', 18}

列表推导式生成

st = {
    
    i for i in range(5)}
print(st)

运行结果:

{0, 1, 2, 3, 4}

集合的常用方法

add

add向一个集合添加一个元素,如果元素已经存在,对集合没用任何影响
例1:

s1 = {
    
    1, 99, 77, 44, 55}
s1.add(22)
s1.add(99)				# 由于99已经存在,顾对集合没有任何改变
print('添加元素后的集合是:', s1)

运行结果:

添加元素后的集合是:{1, 99, 44, 77, 22, 55}

clear

clear用来清空一个集合
例1:

s1 = {
    
    1, 99, 77, 44, 55}
s1.clear()
print('清空后的集合是:',s1)

运行结果:

清空后的集合是:set()									# 注意空集合的方式是set()

copy

copy用来复制一个集合
例1:

s1 = {
    
    1, 99, 77, 44, 55}
s2 = s1.copy()
print('复制后的集合是:', s2)

运行结果:

复制后的集合是: {1, 99, 55, 44, 77}

difference

difference是返回一个差集,该集合在s1中,不在s2中
差集也可以用运算符: -
例1:

s1 = {
    
    1, 99, 77, 44, 55}
s2 = {
    
    33, 44, 55, 66, 7}
ret = s1.difference(s2)
print('只属于s1集合的是:', ret)
print('s1的元素是:', s1)
print('s2的元素是:', s2)

运行结果:

只属于s1集合的是: {1, 99, 77}
s1的元素是: {1, 99, 44, 77, 55}
s2的元素是: {33, 66, 7, 44, 55}

例2:
使用运算符

s1 = {
    
    1, 99, 77, 44, 55}
s2 = {
    
    33, 44, 55, 66, 7}
ret = s1 - s2
print('只属于s1集合的是:', ret)
print('s1的元素是:', s1)
print('s2的元素是:', s2)

运行结果:

只属于s1集合的是: {1, 99, 77}
s1的元素是: {1, 99, 44, 77, 55}
s2的元素是: {33, 66, 7, 44, 55}

difference_update

difference_update修改一个集合,移除集合s1中,属于集合s2的元素,
该方法与difference的不同之处在于,difference会返回一个新集合,而difference_update是修改原集合
例1:

s1 = {
    
    1, 99, 77, 44, 55}
s2 = {
    
    33, 44, 55, 66, 7}
s1.difference_update(s2)
print('s1的元素是:', s1)
print('s2的元素是:', s2)

运行结果:

s1的元素是: {1, 99, 77}
s2的元素是: {33, 66, 7, 44, 55}

discard

从一个集合从移除一个元素,如果集合中不存在这个元素,不做任何操作
例1:

s1 = {
    
    1, 99, 77, 44, 55}
s1.discard(1)
s1.discard(66)					# 66 不存在于s1中,所以没有任何影响
print('s1集合的元素是:', s1)

运行结果:

s1集合的元素是: {99, 44, 77, 55}

intersection

intersection是返回两个集合的交集,即两个集合相同的元素,该方法会返回一个新的集合
交集也可以使用运算符: &
例1:

s1 = {
    
    1, 99, 77, 44, 55}
s2 = {
    
    33, 44, 55, 66, 7}
ret = s1.intersection(s2)				# 生成一个新的集合
print('s1和s2的交集是:', ret)
print('s1的元素是:', s1)
print('s2的元素是:', s2)

运行结果:

s1和s2的交集是: {44, 55}
s1的元素是: {1, 99, 44, 77, 55}
s2的元素是: {33, 66, 7, 44, 55}

例2:
使用运算符

s1 = {
    
    1, 99, 77, 44, 55}
s2 = {
    
    33, 44, 55, 66, 7}
ret = s1 & s2				# 生成一个新的集合
print('s1和s2的交集是:', ret)
print('s1的元素是:', s1)
print('s2的元素是:', s2)

运行结果:

s1和s2的交集是: {44, 55}
s1的元素是: {1, 99, 44, 77, 55}
s2的元素是: {33, 66, 7, 44, 55}

intersection_update

intersection_update是将两个集合的交集从新赋值给原集合,会改变原集合内容

例1:

s1 = {
    
    1, 99, 77, 44, 55}
s2 = {
    
    33, 44, 55, 66, 7}
s1.intersection_update(s2)          # 修改集合s1
print('s1的元素是:', s1)
print('s2的元素是:', s2)

运行结果:

s1的元素是: {44, 55}
s2的元素是: {33, 66, 7, 44, 55}

isdisjoint

判断两个集合是否有交集,如果没有返回True,有返回False
例1:

s1 = {
    
    1, 99, 77, 44, 55}
s2 = {
    
    33, 66, 7}
print('s1和s2没有有交集: ', s1.isdisjoint(s2))

运行结果:

s1和s2没有有交集:  True

issubset

用于判断一个集合是不是另一个集合的子集
也可以用运算符表示:<

例1:

s1 = {
    
    1, 99, 77, 44, 55}
s2 = {
    
    77, 44}
print('判断s2是不是s1的子集: ', s2.issubset(s1))			# 注意自己和自己比,结果是True

运行结果:

判断s2是不是s1的子集:  True

例2:

s1 = {
    
    1, 99, 77, 44, 55}
s2 = {
    
    77, 44}
print('判断s2是不是s1的子集: ', s2 < s1)		# 如果s2中有一个元素不是s1的元素, 返回肯定是False

运行结果:

判断s2是不是s1的子集:  True

issupperset

用于判断一个集合是不是另一个集合的父集合
也可以用运算符表示:>

例1:

s1 = {
    
    1, 99, 77, 44, 55}
s2 = {
    
    77, 44}
print('判断s2是不是s1的父集: ', s2.issuperset(s1))			# s2 不是 s1的父集
print('判断s1是不是s2的父集: ', s1.issuperset(s2))			# s1 包含s2,是s2的父集

运行结果:

判断s2是不是s1的父集:  False
判断s1是不是s2的父集:  True

例1:

s1 = {
    
    1, 99, 77, 44, 55}
s2 = {
    
    77, 44}
print('判断s2是不是s1的父集: ', s2 > s1)			# s2 不是 s1的父集
print('判断s1是不是s2的父集: ', s1 > s2)			# s1 包含s2,是s2的父集

运行结果:

判断s2是不是s1的父集:  False
判断s1是不是s2的父集:  True

pop

pop用于从集合中随机删除一个元素(说是随机,但其实也有一定的规律),并返回这个元素,如果集合是一个空集合,会报KeyError

例1:

s1 = {
    
    1, 99, 77, 44, 55}
ret = s1.pop()
print('被删除的元素是:', ret)
print('s1的元素是:', s1)

运行结果:

被删除的元素是: 1
s1的元素是: {99, 44, 77, 55}

remove

remove是移除一个指定的元素,如果集合中不存在这个元素,报KeyError错误
例1:

s1 = {
    
    1, 99, 77, 44, 55}
s1.remove(99)
print('移除99后的集合是:', s1)

s1.remove(100)
print('移除不存在的元素,会报错')				# 不会打印这行,因为在上行就报错了

运行结果:

移除99后的集合是: {1, 44, 77, 55}							# 移除的元素不存在,报错
Traceback (most recent call last):
  File "/projects/oldboy/desktop-computer/week03/set_test.py", line 33, in <module>
    s1.remove(100)
KeyError: 100

symmetric_difference

symmetric_difference对称差集,是将两个集合中除去相同的元素,将各自不同的元素组合成一个新的集合,并返回
也可以使用符号: ^

例1:

s1 = {
    
    1, 99, 77, 44, 55}
s2 = {
    
    33, 44, 55, 66, 7}
ret = s1.symmetric_difference(s2)
print('s1和s2的对称差集是:', ret)
print('s1的元素是:', s1)
print('s2的元素是:', s2)

运行结果:

s1和s2的对称差集是: {33, 66, 1, 99, 7, 77}
s1的元素是: {1, 99, 44, 77, 55}
s2的元素是: {33, 66, 7, 44, 55}

例2:
使用符号

s1 = {
    
    1, 99, 77, 44, 55}
s2 = {
    
    33, 44, 55, 66, 7}
ret = s1 ^ s2
print('s1和s2的对称差集是:', ret)
print('s1的元素是:', s1)
print('s2的元素是:', s2)

运行结果:

s1和s2的对称差集是: {33, 66, 1, 99, 7, 77}
s1的元素是: {1, 99, 44, 77, 55}
s2的元素是: {33, 66, 7, 44, 55}

symmetric_difference_update

symmetric_difference_update是将对称差集赋值给原集合

s1 = {
    
    1, 99, 77, 44, 55}
s2 = {
    
    33, 44, 55, 66, 7}
s1.symmetric_difference_update(s2)
print('s1和s2的对称差集赋值给s1:', s1)
print('s2的元素是:', s2)

运行结果:

s1和s2的对称差集赋值给s1: {1, 33, 99, 66, 7, 77}
s1和s2的对称差集是: {33, 66, 7, 44, 55}

union

union是返回两个集合的并集,如果两个集合中有相同的部分,只会保留一份
并集也可以使用运算符: |
例1:

s1 = {
    
    1, 99, 77, 44, 55}
s2 = {
    
    33, 44, 55, 66, 7}
ret = s1.union(s2)
print('s1和s2的并集是::', ret)
print('s1的元素是:', s1)
print('s2的元素是:', s2)

运行结果:

s1和s2的并集是:: {1, 33, 99, 66, 7, 44, 77, 55}
s1的元素是: {1, 99, 44, 77, 55}
s2的元素是: {33, 66, 7, 44, 55}

例2:
使用运算符

s1 = {
    
    1, 99, 77, 44, 55}
s2 = {
    
    33, 44, 55, 66, 7}
ret = s1 | s2
print('s1和s2的并集是::', ret)
print('s1的元素是:', s1)
print('s2的元素是:', s2)

运行结果:

s1和s2的并集是:: {1, 33, 99, 66, 7, 44, 77, 55}
s1的元素是: {1, 99, 44, 77, 55}
s2的元素是: {33, 66, 7, 44, 55}

update

update用于和一个集合添加元素,相当于将两个集合合并后,从新赋值给原集合

例1:

s1 = {
    
    1, 99, 77, 44, 55}
s2 = {
    
    33, 44, 55, 66, 7}
s1.update(s2)
print('s1的元素是:', s1)
print('s2的元素是:', s2)

运行结果:

s1的元素是: {1, 33, 99, 66, 7, 44, 77, 55}
s2的元素是: {33, 66, 7, 44, 55}

猜你喜欢

转载自blog.csdn.net/z929162742/article/details/106983529