好好学Python:从零基础到项目实战
上QQ阅读APP看书,第一时间看更新

5.5 集合

上一节介绍了Python中的字典,Python中的字典是对数学中映射概念支持的直接体现。接下来将讲解一个和字典非常相似的对象:集合。

示例如下:

>>> student={}
>>> print(f'student对象的类型为:{type(student)}')
student对象的类型为:<class 'dict'>
>>> number={1,2,3}
>>> print(f'number对象的类型为:{type(number)}')
number对象的类型为:<class 'set'>

由输出结果可以看到,这里出现了一个新的类型set。

在Python中,用花括号括起一些元素,元素之间直接用逗号分隔,这就是集合。集合在Python中的特性可以概括为两个字:唯一。

示例如下:

>>> numbers={1,2,3,4,5,3,2,1,6}
>>> numbers
{1, 2, 3, 4, 5, 6}

由输出结果可以看到,set集合中输出的结果自动将重复数据清除了。

需要注意的是,集合是无序的,不能通过索引下标的方式从集合中取得某个元素。例如:

由输出结果可以看到,在集合中使用索引下标时,执行报错,错误提示为:集合对象不支持索引。

5.5.1 创建集合

创建集合有两种方法:一种是直接把元素用花括号({})括起来,花括号中的元素之间用英文模式下的逗号(,)分隔;另一种是用set(obj)方法定义,obj为一个元素、一个列表或元组。

例如:

>>> numbers={1,2,3,4,5}
>>> print(f'numbers变量的类型为:{type(numbers)}')
numbers变量的类型为:<class 'set'>
>>> numbers
{1, 2, 3, 4, 5}
>>> name=set('abc')  #一个元素,仔细观察输出结果
>>> name
{'a', 'b', 'c'}
>>> print(f'name变量的类型为:{type(name)}')
name变量的类型为:<class 'set'>
>>> students=set(['小萌','小智'])   #一个列表
>>> students
{'小萌', '小智'}
>>> print(f'students变量的类型为:{type(students)}')
students变量的类型为:<class 'set'>
>>> stu=set(('小萌','小智'))    #一个元组
>>> stu
{'小萌', '小智'}
>>> print(f'stu变量的类型为:{type(stu)}')
stu变量的类型为:<class 'set'>

由输出结果看到,集合的创建方式是多种多样的。

5.5.2 集合方法

集合中提供了一些集合操作的方法,如添加、删除、是否存在等方法。

1.add()方法

在集合中,使用add()方法为集合添加元素。看如下示例:

>>> numbers=set([1,2])
>>> print(f'numbers变量为:{numbers}')
numbers变量为:{1, 2}
>>> numbers.add(3)
>>> print(f'增加元素后,numbers变量为:{numbers}')
增加元素后,numbers变量为:{1, 2, 3}

由输出结果可以看到,使用add()方法,集合可以很方便地增加元素。

2.remove()方法

在集合中,使用remove()方法可以删除元素。例如:

>>> students=set(['小萌','小智','小张'])
>>> print(f'students变量为:{students}')
students变量为:{'小萌', '小张', '小智'}
>>> students.remove('小张')
>>> print(f'删除元素小张后,students变量为:{students}')
删除元素小张后,students变量为:{'小萌', '小智'}

由输出结果可以看到,集合中可以使用remove()方法删除元素。

3.in和not in

和字典及列表类似,有时也需要判断一个元素是否在集合中。可以使用in和not in判断一个元素是否在集合中,in和not in的返回结果是True或False。例如:

>>> numbers={1,2,3,4,5}
>>> 2 in numbers
True
>>> 2 not in numbers
False
>>> 'a' in numbers
False
>>> 'a' not in numbers
True

由输出结果可以看到,in和not in是互为相反的。

在实际项目应用中,集合的使用并不是很多,但集合的用处较大,使用时的效率也较高。