Python 基础 - 9. 数据类型之集合

1.集合的创建

集合是一个无序不重复元素的集。基本功能包括关系测试和消除重复元素。

创建集合:大括号或 set() 函数可以用来创建集合。注意:想要创建空集合,你必须使用 set() 而不是 {},后者用于创建空字典。大括号也不可以创建元素含有字典与列表的集合。

集合中三个特性

1. 确定性

2. 互异性(去重)

3. 无序性(集合中元素没有先后之分),如集合{3,4,5}和{3,5,4}算作一个集合

In [79]: s = {1}
In [80]: type(s)
Out[80]: set
In [81]: s = {1,2,3,5,6,3}
In [82]: type(s)
Out[82]: set
In [85]: s  # 去重了(3 出现两次)
Out[85]: {1, 2, 3, 5, 6}

 

集合创建

# 1. 直接创建
In [102]: s = {1,2,3,4,3,5}
In [103]: s
Out[103]: {1, 2, 3, 4, 5}
In [104]: type(s)
Out[104]: set

# 2. 通过列表转成集合
In [105]: l=[1,2,3,4,5,6,3]
In [106]: s=set(l)
In [107]: s
Out[108]: {1, 2, 3, 4, 5, 6}

# 3. 通过元组转换成集合
In [109]: t=(1,2,3,4,5,6,3)
In [110]: s=set(t)
In [111]: s
Out[111]: {1, 2, 3, 4, 5, 6}

 

增加:

add ,之前集合中有就不添加,没有就添加,但是每次只能添加一个值,否则报错

 # 集合中有就不增加,没有就增加
In [124]: s = {1,2,3,4,5}

In [125]: s.add(2)  # 之前有就不增加

In [126]: s
Out[126]: {1, 2, 3, 4, 5}

In [127]: s.add(6)    #之前没有,就增加

In [128]: s
Out[128]: {1, 2, 3, 4, 5, 6}

 In [147]: s.add(1,23)  # 因为只允许添加一个,此时添加多个就报错
 ---------------------------------------------------------------------------
 TypeError Traceback (most recent call last)
 <ipython-input-147-4b15bfd145fc> in <module>()
 ----> 1 s.add(1,23)  

 TypeError: add() takes exactly one argument (2 given) 提示说指给一个参数,上面却给了两个参数

删除

pop 随机删除

In [129]: s
Out[129]: {1, 2, 3, 4, 5, 6}

In [130]: s.pop()
Out[130]: 1

In [131]: s
Out[131]: {2, 3, 4, 5, 6}

remove指定删除,没有就报错

In [131]: s
Out[131]: {2, 3, 4, 5, 6}

In [132]: s.remove(6)

In [133]: s
Out[133]: {2, 3, 4, 5}

 In [138]: s.remove(10)
 ---------------------------------------------------------------------------
 KeyError Traceback (most recent call last)
 <ipython-input-138-99f2b84d3df8> in <module>()
 ----> 1 s.remove(10)

 KeyError: 10

discard 删除, 有就删除,没有就不删除也不报错

In [139]: s
Out[139]: {2, 4, 5}

In [140]: ret=s.discard(2)

In [141]: ret

In [142]: ret=s.discard(100)

In [143]: ret

update更新

In [145]: s.update([1,2,3,4]) # 以列表方式添加

In [146]: s
Out[146]: {1, 2, 3, 4, 5}

In [150]: s.update((10,11)) # 以元组方式添加
In [151]: s

Out[151]: {1, 2, 3, 4, 5, 10, 11}

clear 清除

In [152]: s.clear()

In [153]: s
Out[153]: set()

 

集合类型的关系

1. 交集

In [1]: iphone7 = {'cmz','aimi','keke','jack'}

In [2]: iphone8 = {'cmz','Tom','eric'}

In [3]: iphone7.intersection(iphone8)
Out[3]: {'cmz'}

或者

 In [4]: iphone7&iphone8  # 去交集
 Out[4]: {'cmz'}

 

2. 差集

In [5]: iphone7.difference(iphone8)
Out[5]: {'aimi', 'jack', 'keke'}

In [6]: iphone7-iphone8
Out[6]: {'aimi', 'jack', 'keke'}

In [7]: iphone8.difference(iphone7)
Out[7]: {'Tom', 'eric'}

In [8]: iphone8-iphone7
Out[8]: {'Tom', 'eric'}

 

3. 并集

In [10]: iphone7.union(iphone8) # 顺序没先后
Out[10]: {'Tom', 'aimi', 'cmz', 'eric', 'jack', 'keke'}

In [11]: iphone7|iphone8  # 顺序没先后
Out[11]: {'Tom', 'aimi', 'cmz', 'eric', 'jack', 'keke'}

 

4. 对称差集(交集取反)

In [25]: s = {1,2,3,4}

In [26]: s2 = {2,3,5,6}

In [27]: s^s2
Out[27]: {1, 4, 5, 6}

In [28]: s.symmetric_difference(s2)
Out[28]: {1, 4, 5, 6}

5.子集

In [37]: s
Out[37]: {1, 2, 3, 4}

In [38]: s2
Out[38]: {1, 2, 3, 4, 5, 6}

In [39]: s.issubset(s2)   # s是s2的的子集
Out[39]: True
或者

 In [44]: s2<=s

 Out[44]: False


In [40]: s2.issuperset(s) # s2是s的的超集
Out[40]: True
或者

 In [43]: s2>=s
 Out[43]: True

其他

In [50]: s1={1,2,3}
In [51]: s2={1,2,4,5}
In [52]: s1.difference(s2)   #求出 s1 s2的差集
Out[52]: {3} 
 
In [54]: s1.difference_update(s2)
In [55]: s1
Out[55]: {3} # 此时将差集的值赋值给s1
In [56]: s2
Out[56]: {1, 2, 4, 5}
s.intersection_update
s.symmetric_difference_update  
这两个方法和上述类似

 

posted @ 2018-01-15 16:21  Love_always_online  阅读(166)  评论(0编辑  收藏  举报