Python数据类型之集合

集合类型(set)

1. 集合介绍

由不同元素组成的集合,集合中是一组无序排列的可hash值,可以作为字典的key

1.1 定义方式

1
2
3
4
5
6
7
8
9
# 定义:由不同元素组成的集合,集合中是一组无序排列的可hash值,可以作为字典的key

# 定义方法
>>> set([iterable])

>>> set1 = set('yang')
>>> print(set1)

{'yang'}

★2. 常用集合方法

2.1 交集、并集、差集、对称差集

语法说明
交集

set1 & set2

并集

set1 | set2

差集

set1 - set2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
>>> set1 = set(['A','B','C','D','1'])
>>> set2 = set(['1','2','3','4','A'])

# 交集:set1和set2同时具有的元素的集合
>>> set1 & set2
{'A', '1'}

# 并集:set1和set2的所有元素的集合
>>> set1 | set2
{'3', 'D', 'C', '4', 'A', '1', 'B', '2'}

# 差集:在set1中但是不在set2中的所有元素集合
>>> set1 - set2
{'D', 'B', 'C'}

# 对称差集:在set1或set2中,但不会同时出现在二者中
>>> set1 ^ set2
{'D', 'C', '4', '3', 'B', '2'}

2.2 添加元素

语法说明

添加一项元素
set1.add()

添加多项元素
set1.update()

1
2
3
4
5
6
7
8
9
10
11
12
>>> set1 = set(['A','B','C','D','1'])
>>> set2 = set(['1','2','3','4','A'])

# 添加一项元素
>>> set1.add('E')
>>> set1
{'E', 'D', 'C', 'A', '1', 'B'}

# 添加多项元素
>>> set1.update(['2','3','4'])
>>> set1
{'3', 'D', 'C', '4', 'A', '1', 'B', '2'}

2.3 删除元素

语法说明

删除元素
set1.remove()

1
2
3
4
5
6
7
>>> set1 = set(['A','B','C','D','1'])
>>> set2 = set(['1','2','3','4','A'])

# 删除一项元素
>>> set1.remove('A')
>>> set1
{'D', 'C', '1', 'B'}

2.4 集合长度

语法说明

len(set1)

1
2
3
4
5
>>> set1 = set(['A','B','C','D','1'])
>>> set2 = set(['1','2','3','4','A'])

>>> len(set1)
5

2.5 判断元素是否是集合成员

语法说明

x in set1(同理 x not in set1判断元素是否不是集合成员)

1
2
3
4
5
>>> set1 = set(['A','B','C','D','1'])
>>> set2 = set(['1','2','3','4','A'])

>>> 'B' in set1
True

2.6 判断set1集合中每一个元素都在set2中

语法说明

set1.issubset(set2)
同:set1 <= set2

1
2
3
4
5
>>> set1 = set(['A','B','C','D','1'])
>>> set2 = set(['1','2','3','4','A'])

>>> set1.issubset(set2)
False

2.7 判断set2集合中的每一个元素都在set1中

语法说明

set1.issuperset(set2)
同:set1 >= set2

1
2
3
4
5
>>> set1 = set(['A','B','C','D','1'])
>>> set2 = set(['1','2','3','4','A'])

>>> set1.issuperset(set2)
False

2.8 set1和set2的合集,返回包含两集合中的每一个元素的集合

语法说明

set1.union(set2)
同:set1|set2

1
2
3
4
5
>>> set1 = set(['A','B','C','D','1'])
>>> set2 = set(['1','2','3','4','A'])

>>> set1.union(set2)
{'3', 'D', 'C', '4', 'A', '1', 'B', '2'}

2.9 set1和set2的交集,返回两集合的共同部分

语法说明

set1.intersection(set2)
同:set1 & set2

1
2
3
4
5
>>> set1 = set(['A','B','C','D','1'])
>>> set2 = set(['1','2','3','4','A'])

>>> set1.intersection(set2)
{'A', '1'}

2.10 set1与set2的差集,返回set1中存在但是set2中不存在的元素

语法说明

set1.difference(set2)
同:set1 - set2

1
2
3
4
5
>>> set1 = set(['A','B','C','D','1'])
>>> set2 = set(['1','2','3','4','A'])

>>> set1.difference(set2)
{'D', 'B', 'C'}

2.11 set1和set2的对称差集,返回set1与set2中不重复的元素

语法说明

set1.symmetric_difference(set2)
同:set1 ^ set2

1
2
3
4
5
>>> set1 = set(['A','B','C','D','1'])
>>> set2 = set(['1','2','3','4','A'])

>>> set1.symmetric_difference(set2)
{'D', 'C', '4', '3', 'B', '2'}

2.12 set1浅复制

语法说明

set1.copy()

1
2
3
4
5
>>> set1 = set(['A','B','C','D','1'])

>>> set3 = set1.copy()
>>> set3
{'B', 'D', 'C', 'A', '1'}

2.13 不可变集合frozenset

语法说明

frozenset([iterable]])
不可添加、删除元素、可哈希的、能用作字典的键、能做其他集合的元素

1
2
3
4
5
6
7
8
9
10
11
12
13
14
>>> set1 = set([1, 2, 3, 4])
>>> set1
{1, 2, 3, 4}
>>> f_set = frozenset(set1)
>>>f_set
frozenset({1, 2, 3, 4})
>>>set1.add('a')
{1, 2, 3, 4, 'a'}

# 不可变集合不能更改集合
>>>f_set.add('b')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'frozenset' object has no attribute 'add'

2.14 set应用-去除列表里重复元素

1
2
3
4
5
6
7
8
# 去除海量列表里重复元素
>>> list_a = [A,B,C,D,A,B]
>>> set_b = set(list_a)
>>> set_b
set([A,B,C,D])
>>> list_c = [i for i in set_b]
>>> list_c
[A,B,C,D]

参考资料

http://www.iplaypy.com/jichu/set.html

http://www.runoob.com/python/python-func-set.html

http://blog.csdn.net/dragonyangang/article/details/72808992

http://blog.csdn.net/business122/article/details/7541486