欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

最全的pythonset集合方法(详尽)

程序员文章站 2022-04-02 11:09:52
一、学习目标: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

相关标签: python