@Python集合学习
Python集合定义
集合定义:由不同元素 组成的集合,集合是一组无序排列的可hash的值,可以作为字典的key.
集合中元素必须是不可变的(数字,字符串,元组)
s = set('hello')
print(s)
s1 =set(['alex','alex','sb'])
print(s1)
#输出结果
#{'o', 'l', 'e', 'h'}
#{'alex', 'sb'}
集合内置方法
add()追加元素
s = {1,2,3,4,5,6}
s.add('s')
print(s)
#输出结果
#{1, 2, 3, 4, 5, 6, 's'}
clear(),清楚集合内的yuans
s = {1,2,3,4,5,6}
s.clear()
print(s)
#输出结果
#set()
copy(),复制
s = {1,2,3,4,5,6}
s1 = s.copy()
print(s1)
#输出结果 {1, 2, 3, 4, 5, 6}
#将s里的元素复制到s1中
pop():删除(无序删除),随机删除集合中的一个元素
s = {3,2,4,'s',8}
s.pop()
print(s)
#数据结果 {3, 4, 8, 's'}
remove():删除,指定删除,指定删除一个元素,若指定删除元素不存在集合中则会报错
s = {3,2,4,'s',8}
s.remove(4)
print(s)
#输出结果:{2, 3, 8, 's'}
discard():指定删除,和上面不同的是,删除元素不存在,则不会报错
s = {3,2,4,'s',8}
s.discard(4)
s1 = s.discard('A')
print(s)
print(s1)
#输出结果 : {2, 3, 8, 's'} None
1打印出相同部分
方法一:用列表的方式来求相同部分
s1 = ['sk','xbk','bba','jeep']
s2 = ['jeep','sk',123,'aaa']
s3 = []
for p_name in s1:
if p_name in s2:
s3.append(p_name)
print(s3)
#输出结果:['sk', 'jeep']
方法二:使用集方法求相同部分
intersection() 方法用于返回两个或更多集合中都包含的元素,即交集
intersection() 方法语句:set.intersection(set1, set2 … etc)
set1 – 必需,要查找相同元素的集合
set2 – 可选,其他要查找相同元素的集合,可以多个,多个使用逗号 , 隔开
如下
s1 = ['sk','xbk','bba','jeep']
s2 = ['jeep','sk',123,'aaa']
s1_set = set(s1)
s2_set = set(s2)
print(s1_set.intersection(s2_set))
print(s1_set&s2_set)
#输出结果都是:['sk', 'jeep']
x = {"a", "b", "c"}
y = {"c", "d", "e"}
z = {"f", "g", "c"}
result = x.intersection(y, z)
print(result)
#输出结果: {'c'}
union() 求并集
s1 = ['sk','xbk','bba','jeep']
s2 = ['jeep','sk',123,'aaa']
s1_set = set(s1)
s2_set = set(s2)
print(s1_set.union(s2_set))
print(s1_set|s2_set)
输出结果
{'xbk', 'aaa', 'jeep', 'sk', 123, 'bba'}
{'xbk', 'aaa', 'jeep', 'sk', 123, 'bba'}
difference():求差集
s1 = ['sk','xbk','bba','jeep']
s2 = ['jeep','sk',123,'aaa']
s1_set = set(s1)
s2_set = set(s2)
print(s1_set.difference(s2_set))
print(s1_set-s2_set)
输出结果
{'bba', 'xbk'}
{'bba', 'xbk'}
symmetric_difference:集合交叉补集
s1 = ['sk','xbk','bba','jeep']
s2 = ['jeep','sk',123,'aaa']
s1_set = set(s1)
s2_set = set(s2)
print(s1_set.symmetric_difference(s2_set))
print(s1_set^s2_set)
输出结果
{'aaa', 'bba', 'xbk', 123}
{'aaa', 'bba', 'xbk', 123}
difference_update(self,s)用于移除两个集合中都存在的元素
s1 = ['sk','xbk','bba','jeep']
s2 = ['jeep','sk',123,'aaa']
s1_set = set(s1)
s2_set = set(s2)
s1_set.difference_update(s2_set)
print(s1_set)
输出结果
{'xbk', 'bba'}
isdisjoint()两个集合的交集为空时返回True
s1 = {1,2}
s2 = {3,4}
print(s1.isdisjoint(s2))
#输出结果:True
issubset():用于判断集合的所有元素是否都包含在指定集合中,如果是则返回 True,否则返回 False。
s1 = {1,2}
s2 = {1,2,3,4}
print(s1.issubset(s2))
#输出结果为 True
s1 = {1,2,9}
s2 = {1,2,3,4}
print(s1.issubset(s2))
#输出结果:False
issuperset():判断指定集合的所有元素是否都包含在原始的集合中,如果是返回True否则返回False.和issubset()类似
update():将集合A的里的元素更新到集合B中,更新多个值
s1={1,2,9}
s2={1,2,3,4}
s1.update(s2)
print(s1)
#输出结果:{1, 2, 3, 4, 9}
frozenset():是冻结的集合,它是不可变的,存在哈希值,好处是它可以作为字典的key,也可以作为其它集合的元素。缺点是一旦创建便不能更改,没有add,remove方法
s=frozenset('hello')
print(s)
输出结果
frozenset({'h', 'l', 'e', 'o'})
集合也可以对列表中的元素进行去重,原理是将列表中重复元素使用集合去重后再转换为列表 如下
names=['AAA','AAA','XXXX']
names=list(set(names))
print(names)
输出结果
['AAA', 'XXXX']