Python集合

本文详细介绍了Python中的集合操作,包括定义、基本操作、冰冻集合、集合推导式以及集合的逻辑运算,如交集、并集、差集、对称差集等。通过实例展示了如何创建、修改和查询集合,以及如何进行集合间的各种逻辑运算。
摘要由CSDN通过智能技术生成

10 集合

在这里插入图片描述

10.1 集合的定义及基本操作

code:

# **********************************************************
"""
集合:确定的一组无序的数据的组合
    确定:当前集合中元素的值不能重复
    由多个数据组合的复合型数据(容器类型数据)
    无序的
    功能:成员检测,从序列中去除重复项以及数学中的集合类计算,例如交集、并集、差集和对称差集等等
集合的定义
    1.使用{}定义集合
    2.set()函数定义集合或强制类型转换
    3.集合推导式定义集合
    注意:集合中的元素不能重复,集合中存放的数据:Number,Strings,Tuple,冰冻集合。字典和列表不能作为集合的元素
        True在集合中表示为1,False在集合中表示为0。所以True和1只有一个能存在,False和0只有一个能存在。
        由于集合中的元素都不可以改变,因此不涉及到深拷贝的问题
集合的函数
    frozenset([iterable])---返回一个冰冻集合,冰冻集合不可更改。
    in---判断元素是否在集合中,在返回True,不在返回False
    not in---判断元素是否不在结合中,在返回False,不在返回True
    len(set)---返回集合set中的元素数量。
    set.add(elem)---将元素 elem 添加到集合中。返回值为None
    set.update(*others)---更新集合,添加来自others中的所有元素。返回值为None
    set.pop()---从集合中移除并返回任意一个元素。如果集合为空则会引发KeyError。
    set.remove(elem)---从集合中移除元素elem。如果elem不存在于集合中则会引发KeyError。返回值为None
    set.discard(elem)---如果元素elem存在于集合中则将其移除。所删元素不存在不会引发异常。返回值为None
    set.copy()---返回集合set()的浅拷贝
    set.clear()---从集合中移除所有元素。返回值为None
"""
print("集合的定义**************************************************")
setvar = {True,2,3,4,5,'abd',1,(1,2,3),9.99}
print(f"setvar = {setvar}")
setvar1 = set({1,2,3,'x','y',9.99})
print(f"setvar1 = {setvar1}")
setvar2 = set()
print(f"setvar2 = {setvar2}")
listvar = [2,5,'x']
print(f"listvar = {listvar}")
setvar3 = set(listvar)
print(f"setvar3 = {setvar3}")
setvar4 = frozenset(('jasmine','Booooo'))
setvar3.add(setvar4)  # 向集合中添加冰冻集合
print(f"setvar3 = {setvar3}")
print("集合的基本操作**************************************************")
print("in and not in**************************************************")
setvar5 = {True,2,'abd',1,(1,2,3),9.99,'Jasmine','Boly'}
print(f"setvar5 = {setvar5}")
print(f"'Jasmine' in setvar5 = {'Jasmine' in setvar5}")
print(f"'Jasmine' not in setvar5 = {'Jasmine' not in setvar5}")
print("len()**************************************************")
print(f"len(setvar5) = {len(setvar5)}")
print("add()**************************************************")
print(f"setvar5.add('Boo') = {setvar5.add('Boo')}")
print(f"setvar5 = {setvar5}")
print("update()**************************************************")
print(f"setvar5.update('Boo') = {setvar5.update('Boo')}")
print(f"setvar5.update('x','y') = {setvar5.update('x','y')}")
print(f"setvar5 = {setvar5}")
print("remove()**************************************************")
# print(f"setvar5.pop() = {setvar5.pop()}")
print(f"setvar5.remove('x') = {setvar5.remove('x')}")
print(f"setvar5 = {setvar5}")
print("discard()**************************************************")
print(f"setvar5.discard('y') = {setvar5.discard('y')}")
print(f"setvar5 = {setvar5}")
print(f"setvar5.discard('y') = {setvar5.discard('y')}")
print(f"setvar5 = {setvar5}")
print("copy()**************************************************")
setvar6 = setvar5.copy()
print(f"setvar6 = {setvar6}")
print("clear()**************************************************")
print(f"setvar5.clear() = {setvar5.clear()}")
print(f"setvar6.clear() = {setvar6.clear()}")
print(f"setvar5 = {setvar5},setvar6 = {setvar6}"

运行结果:

E:\Programs_Way\Python\python.exe D:/Prj/Python/Study_Basic_Grammar/_46set_definition_operation_function.py
集合的定义**************************************************
setvar = {True, 2, 3, 4, 5, 9.99, (1, 2, 3), 'abd'}
setvar1 = {'y', 1, 'x', 2, 3, 9.99}
setvar2 = set()
listvar = [2, 5, 'x']
setvar3 = {'x', 2, 5}
setvar3 = {'x', frozenset({'jasmine', 'Booooo'}), 2, 5}
集合的基本操作**************************************************
in and not in**************************************************
setvar5 = {'Jasmine', True, 2, 'abd', 'Boly', 9.99, (1, 2, 3)}
'Jasmine' in setvar5 = True
'Jasmine' not in setvar5 = False
len()**************************************************
len(setvar5) = 7
add()**************************************************
setvar5.add('Boo') = None
setvar5 = {'Jasmine', True, 2, 'abd', 'Boo', 'Boly', 9.99, (1, 2, 3)}
update()**************************************************
setvar5.update('Boo') = None
setvar5.update('x','y') = None
setvar5 = {True, 2, 'B', 9.99, 'Jasmine', 'Boly', 'abd', 'y', 'x', 'Boo', (1, 2, 3), 'o'}
remove()**************************************************
setvar5.remove('x') = None
setvar5 = {True, 2, 'B', 9.99, 'Jasmine', 'Boly', 'abd', 'y', 'Boo', (1, 2, 3), 'o'}
discard()**************************************************
setvar5.discard('y') = None
setvar5 = {True, 2, 'B', 9.99, 'Jasmine', 'Boly', 'abd', 'Boo', (1, 2, 3), 'o'}
setvar5.discard('y') = None
setvar5 = {True, 2, 'B', 9.99, 'Jasmine', 'Boly', 'abd', 'Boo', (1, 2, 3), 'o'}
copy()**************************************************
setvar6 = {True, 2, 'Boo', 'B', 9.99, (1, 2, 3), 'Jasmine', 'Boly', 'abd', 'o'}
clear()**************************************************
setvar5.clear() = None
setvar6.clear() = None
setvar5 = set(),setvar6 = set()

Process finished with exit code 0

10.2 冰冻集合

code:

# *************************************************************
"""
冰冻集合
    定义:frozenset()
    特点:冰冻集合一旦定义,不能做任何的修改
         冰冻集合只能做逻辑运算
         frozenset()本身就是一个强制转换类的函数,可以把其他任何容器类型的数据转为冰冻集合
    推导式:和其他推导式类似,
"""
print("冰冻集合定义**************************************************")
setvar = frozenset([1,2,'x','m',0,9])
print(f"setvar = {setvar}")
print("冰冻集合推导式**************************************************")
setvar2 = frozenset([i**2 for i in range(6)])
print(f"setvar2 = {setvar2}")

运行结果:

E:\Programs_Way\Python\python.exe D:/Prj/Python/Study_Basic_Grammar/_47flozenset.py
冰冻集合定义**************************************************
setvar = frozenset({0, 1, 2, 9, 'm', 'x'})
冰冻集合推导式**************************************************
setvar2 = frozenset({0, 1, 4, 9, 16, 25})

Process finished with exit code 0

10.3 集合推导式

code:

# ***************************************************************
"""
集合推导式:
    1.普通推导式
    2.带有条件表达式的推导式
    3.带有循环嵌套的推导式
"""
print("普通推导式**************************************")
setvar1 = {1,2,3,9,8}
print(f"setvar1 = {setvar1}")
setvar = {i**2 for i in setvar1}
print(f"setvar = {setvar}")
print("带有条件表达式的推导式**************************************")
setvar2 = {i**2 for i in setvar1 if i%2==0}
print(f"setvar2 = {setvar2}")
print("带有循环嵌套的推导式**************************************")
setvar3 = {1,2,3}
setvar4 = {4,5,6}
setvar5 = {i+j for i in setvar3 for j in setvar4}
print(f"setvar5 = {setvar5}")

运行结果:

E:\Programs_Way\Python\python.exe D:/Prj/Python/Study_Basic_Grammar/_48set_comprehension.py
普通推导式**************************************
setvar1 = {1, 2, 3, 8, 9}
setvar = {64, 1, 4, 9, 81}
带有条件表达式的推导式**************************************
setvar2 = {64, 4}
带有循环嵌套的推导式**************************************
setvar5 = {5, 6, 7, 8, 9}

Process finished with exit code 0

10.4 集合逻辑运算

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nWCpEpcf-1647948786858)(C:\Users\15495\AppData\Roaming\Typora\typora-user-images\1646623550706.png)]

code:

# *****************************************************
"""
集合逻辑运算:交& 并| 差集- 对称差^
    交集:
    set.intersection(*others)---set & other & ...返回一个新集合,其中包含原集合以及others指定的所有集合中共有的元素。
    set.intersection_update(*others)---set &= other & ...更新集合,只保留其中在所有others中也存在的元素。返回值为None
    并集:
    set.union(*others)---set | other | ...返回一个新集合,其中包含来自原集合以及others指定的所有集合中的元素。
    set.update(*others)---set |= other | ...更新集合,添加来自others中的所有元素。返回值为None
    差集:
    set.difference(*others)---set - other - ...返回一个新集合,其中包含原集合中在others指定的其他集合中不存在的元素。
    set.difference_update(*others)---set -= other | ...更新集合,移除其中也存在于others中的元素。返回值为None
    对称差:
    set.symmetric_difference(other)---set ^ other,返回一个新集合,其中的元素或属于原集合或属于other指定的其他集合,但不能同时属于两者。
    set.symmetric_difference_update(other)---set ^= other更新集合,只保留存在于集合的一方而非共同存在的元素。返回值为None
    检测超集和子集:
    set.issuperset(other)---set >= other,检测是否other中的每个元素都在集合set之中。
                            set > other,检测集合是否为 other 的真超集,即 set >= other and set != other。
    set.issubset(other)---set <= other,检测是否集合中的每个元素都在other之中。
                      set < other,检测集合是否为 other 的真子集,即 set <= other and set != other。
    两子集不相交:
    set.isdisjoint(other)---如果集合中没有与other共有的元素则返回True。当且仅当两个集合的交集为空集合时,两者为不相交集合。
"""
print("交集*************************************")
vars1 = {1,2,3}
vars2 = {3,4,5,6}
print(f"vars1 & vars2 = {vars1 & vars2}")
res = vars1.intersection(vars2)
print(f"vars1.intersection(vars2) = {res}")
res = vars1.intersection_update(vars2)
print(f"vars1.intersection_update(vars2) = {res}")
print(f"vars1 = {vars1}")

print("并集*************************************")
vars1 = {1,2,3}
vars2 = {3,4,5,6}
print(f"vars1 | vars2 = {vars1 | vars2}")
res = vars1.union(vars2)
print(f"vars1.union(vars2) = {res}")
res = vars1.update(vars2)
print(f"vars1.update(vars2) = {res}")
print(f"vars1 = {vars1}")

print("差集*************************************")
vars1 = {1,2,3}
vars2 = {3,4,5,6}
print(f"vars1 - vars2 = {vars1 - vars2}")
print(f"vars2 - vars1 = {vars2 - vars1}")
res = vars1.difference(vars2)
print(f"vars1.difference(vars2) = {res}")
res = vars1.difference_update(vars2)
print(f"vars1.difference_update(vars2) = {res}")
print(f"vars1 = {vars1}")

print("对称差集*************************************")
vars1 = {1,2,3}
vars2 = {3,4,5,6}
print(f"vars1 ^ vars2 = {vars1 ^ vars2}")
res = vars1.symmetric_difference(vars2)
print(f"vars1.symmetric_difference(vars2) = {res}")
res = vars1.symmetric_difference_update(vars2)
print(f"vars1.symmetric_difference_update(vars2) = {res}")
print(f"vars1 = {vars1}")

print("检测超集和子集*************************************")
vars1 = {1,2,3}
vars2 = {1,2,3,4,5,6}
print(f"vars1 = {vars1}")
print(f"vars2 = {vars2}")
print(f"vars2.issuperset(vars1) = {vars2.issuperset(vars1)}")
print(f"vars1.issubset(vars2) = {vars1.issubset(vars2)}")

print("两子集不相交*************************************")
vars1 = {1,2,3}
vars2 = {4,5,6}
print(f"vars1.isdisjoint(vars2) = {vars1.isdisjoint(vars2)}")

运行结果:

E:\Programs_Way\Python\python.exe D:/Prj/Python/Study_Basic_Grammar/_49set_logical_operator.py
交集*************************************
vars1 & vars2 = {3}
vars1.intersection(vars2) = {3}
vars1.intersection_update(vars2) = None
vars1 = {3}
并集*************************************
vars1 | vars2 = {1, 2, 3, 4, 5, 6}
vars1.union(vars2) = {1, 2, 3, 4, 5, 6}
vars1.update(vars2) = None
vars1 = {1, 2, 3, 4, 5, 6}
差集*************************************
vars1 - vars2 = {1, 2}
vars2 - vars1 = {4, 5, 6}
vars1.difference(vars2) = {1, 2}
vars1.difference_update(vars2) = None
vars1 = {1, 2}
对称差集*************************************
vars1 ^ vars2 = {1, 2, 4, 5, 6}
vars1.symmetric_difference(vars2) = {1, 2, 4, 5, 6}
vars1.symmetric_difference_update(vars2) = None
vars1 = {1, 2, 4, 5, 6}
检测超集和子集*************************************
vars1 = {1, 2, 3}
vars2 = {1, 2, 3, 4, 5, 6}
vars2.issuperset(vars1) = True
vars1.issubset(vars2) = True
两子集不相交*************************************
vars1.isdisjoint(vars2) = True

Process finished with exit code 0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jasmine-Lily

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值