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}
python2和python3区别

三. 操作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__

 

 

posted @ 2017-02-17 12:17  meitangyanyan  阅读(148)  评论(0编辑  收藏  举报