set集合的特点是无序、不重复序列
创建集合:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
a.s1 = { 11 , 22 }
b.s2 = set ()
c.s3 = set ([ 11 , 22 , 33 , 44 ])
s = set () #创建空集合
li = [ 11 , 22 , 11 , 22 ]
s2 = set (li)
print (s2)
{ 11 , 22 }
se = { "123" , "456" }
li = [ ]
list (( 11 , 22 , 33 , 44 ))
原理:当执行 list ()时,内部会调用 list __init__,内部执行 for 循环( 11 , 22 , 33 , 44 ) [ 11 , 22 , 33 , 44 ]
#只要类()这样的形式,就会去调用__init__的方法。 |
操作集合:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
s = set ()
s.add( 123 ) #添加元素
s.add( 123 )
s.add( 123 )
print (s)
s.clear() #清空内容
s.copy() #浅拷贝
s1 = { 11 , 22 , 33 }
s2 = { 22 , 33 , 44 }
s3 = s1.difference(s2) #a中存在,b中不存在的 s1中存在,s2中不存在
s4 = s2.difference(s1) #s2中存在,s1中不存在
# s3 = s1.symmetric_difference(s2) #a中存在b中不存在,b中存在a中不存在的拿出来。 # print(s3) # s1.difference_update(s2) #把a(s1)中存在,b(s2)中不存在的值更新到a中。如果以后还会用到s1,就不要用此方法,如果确定以后不会再用 # s1了就可以直接用这个方法。这样的好处是减少变量的声明。 # print(s1) # s1.discard(11) #移除指定元素,如果元素不存在则不报错 # s1.remove(1111) #移除指定元素,如果元素不存在则报错 # s1.pop() #随机移除一个s1中的元素,因为集合是无序的,所以移除元素是不确定的。移除的 # 时候会返回移除的元素的值。 # pop方法演示: s1 = { 11 , 22 , 33 }
ret = s1.pop()
print (ret)
33 # s1 = {11,22,33} # s2 = {22,33,44} # s3 = s1.intersection(s2) #取s1和s2的交集,就是两个集合都有的元素 # print(s3) # {33, 22} # s1.intersection_update(s2) #同样与difference_update类似,把两个集合的交集元素更新到s1中 # print(s1) # s3 = s1.union(s2) #把两个集合合起来,去并集。如s1和s2,结果就是11,22,33,44 # print(s3) # {33, 22, 11, 44} s1 = { 11 , 22 , 33 }
s1.update([ 55 , 66 , 777 ]) #接收一个可迭代的对象,内部会自己去循环这个对象,然后把元素
# 更新到集合中。相当于批量添加 print (s1)
{ 33 , 66 , 777 , 11 , 22 , 55 }
s1.update( "abcdefg" ) #字符串也是可迭代的,会把每个字符分开,更新到集合中
print (s1)
|
set练习题:
假设脚本自动采集资产。当前情况是:1槽:8G 2槽:4G 4槽2G,如果你做了一个操作,将4槽的内存放到了3槽,1槽的内存换成了4G。资产更新了,应该把最新的数据更新到字典中。
1
2
3
4
5
6
7
8
9
10
11
|
old_dict = {
"#1" : 8 ,
"#2" : 4 ,
"#4" : 2 ,
} new_dict = {
"#1" : 4 ,
"#2" : 4 ,
"#3" : 2 ,
} |
现在应该把#3的数据更新到old_dic字典中,把#4的数据删除,然后更新#1的值。
首先要找出:
应该删除哪几个槽位
应该更新哪几个槽位
应该增加那几个槽位
1
2
3
|
del_set = set (old_dict).difference( set (new_dict)) #取出需要删除的槽位{ '#4' }
add_set = set (new_dict).difference( set (old_dict)) #取出需要添加的槽位{ '#3' }
update_set = set (new_dict).intersection( set (old_dict)) #取出需要更新的槽位{ '#2' , '#1' }
|