集合

1、什么是集合

set(集合)是一个无序不重复元素的数据集,与列表的区别
1、无序的,不可以使用索引进行顺序的访问
2、不能够有重复的数据。

项目开发中,集合主要用在数据元素的去重和测试是否存在。
集合还支持一些数学上的运算,例如:intersection(交集),union(并集),difference(差集)和 symmetric_difference(对称差集)。

2、创建集合

创建集合的方法比较简单,使用大括号或者 set 函数,需要注意空的集合不能够使用 {} 创建,只能使用 set 函数,因为{} 创建的是一个空的字典 :
courses = set() #创建一个空集合
courses = {'Linux', 'C++', 'Vim', 'Linux'}
print(courses)
{'Linux', 'Vim', 'C++'}
上面的代码示例中可以看到,多余的 Linux 字符串已经被自动去除。

集合还可以直接由字符串与 set 函数进行创建,会将字符串拆散为不同的字符,并去除重复的字符:
与大括号的效果不同,大括号不会将字符串拆散
str = {'hello'}
print(str)
结果为{'hello'}

str = set('hello')
print(str)
结果为{'h', 'l', 'o', 'e'}

3、集合操作

3.1 add()向集合中增加元素且只能一次添加一个元素,如果元素已经存在则不进行操作
a = {1,2,3,4}
a.add('hello')
print(a)
{1, 2, 3, 4, 'hello'}

3.2 update()也可以添加元素,且参数可以是列表,元组,字典等
a = {1,2,3,4}
a.update('a','b',[10,11,'c','d'])
print(a)
{1, 2, 3, 4, 'a', 'd', 10, 11, 'c', 'b'}

3.3 remove() 从集合中删除元素,如果元素不存在则抛出 KeyError 异常:
a = {1,2,3,4}
a.remove(1)
print(a)
{2, 3, 4}

3.4 discard()移除集合中的元素,且如果元素不存在,不会发生错误。
a = {1,2,3,4}
a.discard(10)
print(a)
{1,2, 3, 4}

3.5 pop()随机删除集合中的一个元素,语法格式如下:
a = {1,2,3,4}
a.pop()
print(a)
{2, 3, 4}

3.6 len()计算集合元素个数
print(len(a))
4

3.7 clear()清空集合
a = {1,2,3,4}
print(a.clear())
None

3.8 copy()拷贝集合
a = {1,2,3,4}
b = a.copy()
print(b)
{1, 2, 3, 4}

3.9 isdisjoint() 判断两个集合是否包含相同的元素,如果没有返回 True,否则返回 False。
a = {1,2,3,4}
b = {3,4,5,6}
print(a.isdisjoint(b))
False

3.10 issubset() 判断a集合是否为b集合的子集。
a = {1,2,3,4}
b = {3,4,5,6}
print(a.issubset(b))
False

3.11 issuperset() 判断a集合是否是b集合的父集
a = {1,2,3,4}
b = {3,4,5,6}
print(a.issuperset(b))
False

3.12 in判断是否存在
a = {1,2,3,4}
print(1 in a)
True
print('1' not in a)
True
注意 not in 是一个判断 Python 是否不在集合中的操作。in 操作也适用于列表和元组。

4、两个集合的运算

a = {1,2,3,4}
b = {3,4,5,6}

4.1、& 交集,返回既在a又在b的元素,等效于intersection操作:
print(a & b)
print(a.intersection(b))
{3, 4}
a.intersection_update(b) #相当于a = a.intersection(b),将a与b的交集赋值给a
print(a,b)
{3, 4} {3, 4, 5, 6}


4.2、'|' 并集,存在a中或b中的元素,等效于 union 操作:
print(a | b)
print(a.union(b))
{1, 2, 3, 4, 5, 6}
并没有a.union_update(b)这个方法

4.3、- 差集,返回在a不在b的元素,等效于difference操作:
print(a - b)
print(a.difference(b))
{1, 2}
a.difference_update(b) #相当于a = a.difference(b),将a与b的差集赋值给a
print(a,b)
{1, 2} {3, 4, 5, 6}

4.4、^ 对称差集,返回只存在a或b集合中的元素,等效于symmertic_difference操作:
print(a ^ b)
print(a.symmetric_difference(b))
{1, 2, 5, 6}
a.symmetric_difference_update(b) #相当于a = a.symmetric_difference(b),将a与b的对称差集赋值给a
print(a,b)
{1, 2, 5, 6} {3, 4, 5, 6}

5、set不能创建数字集合,要创建数字集合只能用大括号

c = {1234,5678}
print(c)
{1234, 5678} 大括号是将每个数字当成一个元素

d = set(5678)
print(d)
TypeError: 'int' object is not iterable

e = set('1234')
print(e)
{'1', '4', '3', '2'} set将元素拆分

也不能写成
f = set('1234','5678')
print(f)
TypeError: set expected at most 1 arguments, got 2

 

posted on 2018-10-25 13:36  longfei2021  阅读(134)  评论(0编辑  收藏  举报