python成长之路6——set
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python成长之路6——set相关的知识,希望对你有一定的参考价值。
一. set是什么
set是一种无序,不可重复的序列
二. 创建set
(1) se={"123","456"}
(2) li=[11,22,11,22]
se=set(li)
则se={11,22}
说明:set是个类,类名()就是执行这个类里的__init__方法
注意:在python2和python3中第二种方式创建的set表现形式不一样。
1 admindeMacBook-Air-5:stu179471 admin$ python 2 Python 2.7.10 (default, Jul 14 2015, 19:46:27) 3 [GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.39)] on darwin 4 Type "help", "copyright", "credits" or "license" for more information. 5 >>> li=[11,22,11,22] 6 >>> s1=set(li) 7 >>> s1 8 set([11, 22]) 9 >>> exit() 10 admindeMacBook-Air-5:stu179471 admin$ python3 11 Python 3.5.1 (v3.5.1:37a07cee5969, Dec 5 2015, 21:12:44) 12 [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin 13 Type "help", "copyright", "credits" or "license" for more information. 14 >>> li=[11,22,11,22] 15 >>> s2=set(li) 16 >>> s2 17 {11, 22}
三. 操作set
1 s1.add() 添加一个元素 2 s1.update(可迭代对象) 批量添加元素 3 s1.difference(s2) s1中存在,s2中不存在的,会生成一个新set 4 s1.inetrsection(s2) s1和s2的交集,会生成一个新set 5 s1.symmetric_difference(s2) s1和s2中都不存在的,对称差集,会生成一个新set 6 _update:上面三个方法都有其对应的_update方法(e.g.:difference_update()),不会生成一个新set,而会直接更新到s1 7 s1.union(s2) s1和s2的并集 8 s1.isdisjoint(s2) 没有交集,返回True 9 s1.issubset(s2) s1是s2的子集返回True 10 s1.issuperset(s2) s1是s2的父集返回true 11 discard(元素) 移除指定元素,不存在不报错 12 remove(元素) 同上 但是不存在会报错 13 pop() 随机移除,并且获取移除的元素
四. set小例子
实现上图所示的例子
代码如下:
old_dict={ "#1":8, "#2":4, "#4":2, } new_dict={ "#1":4, "#2":4, "#3":2, } old_set=set(old_dict.keys()) new_set=set(new_dict.keys()) del_set=old_set.difference(new_set) add_set=new_set.difference(old_set) update_set=old_set.intersection(new_set) for i in del_set: old_dict.pop(i) for i in add_set: old_dict[i]=new_dict[i] for i in update_set: old_dict[i]=new_dict[i] print(old_dict) print(new_dict)
五. 补充知识
很多类都有双下划线方法,双下划线方法一般都有特殊的含义,
例如:
li=[1,2,3,4] #list __init__
li() #list __call__
li[0] #list __getitem__
li[0]=1 #list __setitem__
del li[0] #list __delitem__
以上是关于python成长之路6——set的主要内容,如果未能解决你的问题,请参考以下文章