Set集合

set集合是无序,不能重复,可嵌套的序列

如何创建

li = []
dic = {"k1":123}
se = {"123","456"} # 查看它的类型
print (type(se)) # 输出
<class 'set'> --------------------------------------------------------------
# 创建: s1 = {11,22} s2 = set() # 创建一个空集合 s3 = set([11,22,33,44]) ---------------------------------------------------------------
# set集合无序,且不重复的序列 li = [11,22,11,33]
s4 = set(li)
print(s4) # 输出
{33, 11, 22}

功能

·添加元素

s = set()
s.add(123)
print(s) # 输出
{123} # PS:添加相同元素,不会生效,因为之前说过set是不重复的序列
s.add(123)
s.add(123)
print(s) # 输出
{123}

·清楚所有内容

s.clear()
print(s) # 输出
set()

·浅拷贝

s.add(456)
s1 = s.copy()
print(s1) # 输出
{456}

·取不同

s1 = {11,22,33}
s2 = {22,33,44} ---------------------------------------------------------- # s1中存在,s2中不存在
s3 = s1.difference(s2)
print(s3) # 输出
{11} ---------------------------------------------------------- # s1中存在,s2中不存在,并更新到s1
s1.difference_update(s2)
print(s1) # 输出
{11} ----------------------------------------------------------- # 取s1,s2中不同的元素
s4 = s1.symmetric_difference(s2)
print(s4) # 输出
{11,44} ------------------------------------------------------------ # 取s1,s2中不同的元素,并更新到s1
s1.symmetric_difference_update(s2)
print(s1) # 输出
{11,44}

·移除

#移除指定元素(不存在不报错)
s1 = {11,22,33}
s1.discard(11)
print(s1) # 输出
{33, 22} --------------------------------------------------- # 移除指定元素(但报错)
s1.remove(1111)
print(s1) --------------------------------------------------- # 随机移除
s2 = {11,22,33}
ret = s2.pop()
print(ret)
print(s2) # 输出
33
{11,22} ·交集 s1 = {11,22,33}
s2 = {22,33,44}
s3 = s1.intersetion(s2)
print(s3) # 输出
{33, 22} ------------------------------------------- # 计算出交集直接更新到s1
s1.intersection_update(s2)
print(s1) # 输出
{33,22}

·并集

s1 = {11,22,33}
s2 = {22,33,44}
s3 = s1.union(s2)
print(s3) # 输出
{33, 22, 11, 44}

·更新

# 批量更新可以迭代的对象
s1 = {11,22,33}
li = [44,22,33,11,55] # 更新列表
s1.update(li)
print(s1) # 输出
{33, 11, 44, 22, 55} ------------------------------------------------- # 更新字符串
s1 = {11,22,33}
a = "boubon"
s1.update(a)
print(s1) # 输出
{33, 'n', 11, 'o', 'u', 22, 'b'}
 class set(object):
"""
set() -> new empty set object
set(iterable) -> new set object Build an unordered collection of unique elements.
"""
def add(self, *args, **kwargs): # real signature unknown
"""
Add an element to a set,添加元素 This has no effect if the element is already present.
"""
pass def clear(self, *args, **kwargs): # real signature unknown
""" Remove all elements from this set. 清除内容"""
pass def copy(self, *args, **kwargs): # real signature unknown
""" Return a shallow copy of a set. 浅拷贝 """
pass def difference(self, *args, **kwargs): # real signature unknown
"""
Return the difference of two or more sets as a new set. A中存在,B中不存在 (i.e. all elements that are in this set but not the others.)
"""
pass def difference_update(self, *args, **kwargs): # real signature unknown
""" Remove all elements of another set from this set. 从当前集合中删除和B中相同的元素"""
pass def discard(self, *args, **kwargs): # real signature unknown
"""
Remove an element from a set if it is a member. If the element is not a member, do nothing. 移除指定元素,不存在不保错
"""
pass def intersection(self, *args, **kwargs): # real signature unknown
"""
Return the intersection of two sets as a new set. 交集 (i.e. all elements that are in both sets.)
"""
pass def intersection_update(self, *args, **kwargs): # real signature unknown
""" Update a set with the intersection of itself and another. 取交集并更更新到A中 """
pass def isdisjoint(self, *args, **kwargs): # real signature unknown
""" Return True if two sets have a null intersection. 如果没有交集,返回True,否则返回False"""
pass def issubset(self, *args, **kwargs): # real signature unknown
""" Report whether another set contains this set. 是否是子序列"""
pass def issuperset(self, *args, **kwargs): # real signature unknown
""" Report whether this set contains another set. 是否是父序列"""
pass def pop(self, *args, **kwargs): # real signature unknown
"""
Remove and return an arbitrary set element.
Raises KeyError if the set is empty. 移除元素
"""
pass def remove(self, *args, **kwargs): # real signature unknown
"""
Remove an element from a set; it must be a member. If the element is not a member, raise a KeyError. 移除指定元素,不存在保错
"""
pass def symmetric_difference(self, *args, **kwargs): # real signature unknown
"""
Return the symmetric difference of two sets as a new set. 对称差集 (i.e. all elements that are in exactly one of the sets.)
"""
pass def symmetric_difference_update(self, *args, **kwargs): # real signature unknown
""" Update a set with the symmetric difference of itself and another. 对称差集,并更新到a中 """
pass def union(self, *args, **kwargs): # real signature unknown
"""
Return the union of sets as a new set. 并集 (i.e. all elements that are in either set.)
"""
pass def update(self, *args, **kwargs): # real signature unknown
""" Update a set with the union of itself and others. 更新 """
pass

set(object)

类CMDB的小实验

old_dic = {
"#1": 8,
"#2": 4,
"#4": 2,
} new_dic = {
"#1": 4,
"#2": 4,
"#3": 2,
} '''
应该删除哪几个槽位
需求分析:
1.old_dic存在,new_dic不存在的key
old_keys = old_dic.keys()
old_set = set(old_keys) new_keys = new_dic.keys()
new_set = set(new_keys) old_set.differents(new_set)
应该更新哪几个槽位
应该增加哪几个槽位
''' old_keys = set(old_dic.keys())
new_keys = set(new_dic.keys()) remove_set = old_keys.difference(new_keys)
add_set = new_keys.difference(old_keys)
update_set = old_keys.intersection(new_keys)
05-03 20:53