最全的pythonset集合方法(详尽)
程序员文章站
2022-07-08 15:49:41
一、学习目标:1、了解python中什么是set集合;2、明白python中set集合的用法;3、了解set集合与dict的区别二、学习内容:1 python中的set集合Python的set集合和其他语言类似,是一个无序不重复元素集,不记录元素位置或者插入点,不能按下标取值或者切片。基本功能包括关系测试和消除重复元素。一般用花括号或set() 函数可以用来创建。1.1 set的特性(1) 无序性:打印输出时的顺序是随机的。(2) 确定性:存储时区分大小写。set的元素和dict的key...
一、学习目标:
1、了解python中什么是set集合;
2、明白python中set集合的用法;
3、了解set集合与dict的区别
二、学习内容:
1 python中的set集合
Python的set集合和其他语言类似,是一个无序不重复元素集,不记录元素位置或者插入点,不能按下标取值或者切片。基本功能包括关系测试和消除重复元素。一般用花括号{}或set() 函数可以用来创建,空集合必须使用 set() 而不是 {}。
1.1 set的特性
(1) 无序性:打印输出时的顺序是随机的。
(2) 确定性:存储时区分大小写。set的元素和dict的key类似,必须是不变对象,任何可变对象是不能放入set中的。
(3) 不重复性:设置集合时,若里面有重复的元素,只会保存并输出一个,相当于存储了dict中key的集合。
1.1.1 代码实例
集合名 = set(list/tuple/dict/字符串)
#s=set(1)这样设置集合会报错:TypeError: 'int' object is not iterable
#s=set([1])或者s=set('1')这样设置都没问题,即set方法中只能是列表、元组、字典和字符串类型
#f=set({1:2, 'a':2, 'c':3})#存储key。输出f为{1, 'a', 'c'}
s={1,2,3,2,8,1,2,1}#也可以s=set([1,2,3,2,8,1,2,1])
print(s)#输出为{8, 1, 2, 3} ,无序性、不重复性
s=set([1,2,3,2,8,1,2,1])
#print(s[1])输出报错TypeError: 'set' object is not subscriptable。集合set不可切片。
#s[0]='1'
#print(s)输出报错TypeError: 'set' object does not support item assignment。集合set不可按下标赋值取值。
#集合的确定性,其元素必须是不可变对象,但是列表可以
#s1=set([s,"hhhjjjj"])#报错。TypeError: unhashable type: 'set'
#确定性。列表元素可为变量
s=[1,2,'d','2']
s1=[s,"hhhjjjj"]
print(s1)#输出[[1, 2, 'd', '2'], 'hhhjjjj']
2 set集合的用法
Python的set集合和数学集合相似,都可以进行交集、合集(并集)、差集,也可以进行增删查改。
print(dir(set))#set集合中的所有方法
#输出['__and__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__iand__', '__init__', '__init_subclass__', '__ior__', '__isub__', '__iter__', '__ixor__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__or__', '__rand__', '__reduce__', '__reduce_ex__', '__repr__', '__ror__', '__rsub__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__xor__', 'add', 'clear', 'copy', 'difference', 'difference_update', 'discard', 'intersection', 'intersection_update', 'isdisjoint', 'issubset', 'issuperset', 'pop', 'remove', 'symmetric_difference', 'symmetric_difference_update', 'union', 'update']
2.1 集合的数学用法
2.1.1 代码实例
s=set([1,2,3,2,8,1,2,1])
s1=set([1,3])
s2=set("128")#注意存储是{'2', '1', '8'},而s2=set({"128"})和s2={"128"}输出是{'128'}
#交集
print(s&s1,s.intersection(s1),s&s2)#输出s与s1的交集{1, 3},s和s2的交集为空set()。符号&和intersection()方法是一个意思
#并集
print(s2|s1,s2.union(s1))#输出s2与s1的并集{'8', 1, 3, '2', '1'}。符号|和union()方法是一个意思
#差集
print(s-s1,s.difference(s1))#输出s与s1的差集{8, 2}。符号-和difference()方法是一个意思
#对称差集,即s与s2的并集-交集
s2=set([1,3,5])
print(s^s2,s.symmetric_difference(s2))#输出s与s2的对称差集{2, 5, 8}。符号^和symmetric_difference()方法是一个意思
print(s1.issubset(s))#子集。s1是否为s子集,是返回为True
print(s.issuperset(s1))#父集。s是否为s1父集,是返回为True
s3=set([9,12])
print(s.isdisjoint(s3))#s与s3是否有交集,若无(即交集为空)则返回为True
print(s==s1,s>s1,s<s1)#集合运算中的大小比较,返回布尔值False True False
print(2 in s,5 not in s)#集合运算中成员包含,返回布尔值True True
2.2 集合的常用方法
2.2.1 代码实例
#增
s=set([2,3,2,8,1,2,1])
s.add('1')
s.add('138')#作为一个整体添加进去
print(s)
s.update('138')#拆分成单个字符添加进去
print(s)
#删
#s.remove(1)
#s.remove('11')#remove删除不存在的元素会报错,KeyError: '11'。
s.discard('11')#discard删除不存在的元素不会报错,即元素存在会删除,不存在不做任何处理。
s.pop()#pop删除不需要参数,随机删除集合中存在的元素。例如两次输出分别为随机删除了'8',{1, 2, 3, '138', 8, '3', '1'},随机删除了'1',{1, 2, 3, '138', '3', 8, '8'}
s=set()
#s.pop()#pop删除空集合会报错KeyError: 'pop from an empty set'
s=set([1])
s.pop()#pop删除一个元素的集合会返回空集合set()
print(s)
s=set('settry')
s.clear()#clear清空不需要参数,返回输出为空集合set()
print(s)
s=set('settry')
print(len(s))#输出为集合s的长度
for i in s:#遍历
print(i)
'''
遍历输出为
y
s
r
t
e
'''
课堂小知识:
提示:ctrl +左键可以查看源码。例如,查看isdisjoint函数源码
def isdisjoint(self, *args, **kwargs): # real signature unknown
""" Return True if two sets have a null intersection. """
pass
1、不可变集合frozenset,类似于字符串、元组,其内容是不可更改的,强行赋值更改则报AttributeError错误。除此之外,其他功能及操作跟可变集合set一样。
2、集合set、不可变集合frozenset中的copy方法,例如s1=s.copy(),是s1浅复制s集合中的内容,详细可参考 python中的深copy和浅copy.
本文地址:https://blog.csdn.net/Hy2424729039/article/details/110818407