1、集合概念
Python中的集合,是一个无序的、没有重复项的集。它支持数学概念上的集合操作,如交集、并集、补集和差集。集合是可变的,可以在其中添加或删除项。集合用花括号“{}”括起来,并用逗号“,”来分隔其中的项。
2、创建集合
可以使用花括号“{}”创建集合,集合会自动去除重复的项。下面的集合包含了几种用字符串表示的水果:
- >>> # 创建fruits集合时,'apple'出现了两次
- >>> fruits = {'apple', 'banana', 'watermelon', 'strawberry', 'apple'}
- >>> fruits # 查看fruits集合,'apple'只有保留了一个
- {'apple', 'strawberry', 'banana', 'watermelon'}
与列表、元组、字典一样,集合也可以用工厂函数set()来创建。set()函数的参数要么为空,要么为可迭代对象(如列表、元组和字符串):
- >>> fruits = set(['apple', 'banana', 'watermelon', 'strawberry', 'apple']) # 以列表为参数创建集合
- >>> fruits
- {'apple', 'strawberry', 'banana', 'watermelon'}
- >>> numbers = set((1, 2, 3, 3, 2, 4)) # 以元组为参数创建集合
- >>> numbers
- {1, 2, 3, 4}
- >>> letters = set('banana') # 以字符串为参数创建集合
- >>> letters
- {'b', 'a', 'n'}
如果想要创建一个空集合,那么使用空的花括号“{}”是行不通的,因为这样创建的是一个空字典:
- >>> empty = {}
- >>> empty
- {}
- >>> type(empty)
- <class 'dict'>
创建空集合的唯一方式就是使用不包含任何参数的set()函数:
- >>> empty = set()
- >>> empty # 空集合表示为set()
- set()
- >>> type(empty)
- <class 'set'>
3、集合添加项
集合是可变的数据类型,在创建集合之后,可以使用集合的add()方法向其添加项:
- >>> numbers = {1, 2, 3}
- >>> numbers.add(4) # 向numbers集合中添加整数4
- >>> numbers
- {1, 2, 3, 4}
- >>> numbers.add('five') # 向numbers集合中添加字符串'five'
- >>> numbers
- {1, 2, 3, 4, 'five'}
- >>> numbers.add((5, 6, 7)) # 向numbers集合中添加元组(5, 6, 7)
- >>> numbers
- {1, 2, 3, 4, (5, 6, 7), 'five'}
如果向某个集合中添加已经存在的项,那么什么也不会发生:
- >>> fruits = {'apple', 'strawberry', 'banana', 'watermelon'}
- >>> fruits
- {'banana', 'apple', 'watermelon', 'strawberry'}
- >>> fruits.add('apple') # 添加已经存在的项'apple'
- >>> fruits # fruits集合并没有改变
- {'banana', 'apple', 'watermelon', 'strawberry'}
也可以使用集合的update()方法向集合中添加项,参数必须是可迭代对象,如列表、字符串或另一个集合。类似于列表的append()方法和extend()方法,但区别是集合的update()方法总是会将可迭代对象“展开”:
- >>> numbers = {1}
- >>> numbers
- {1}
- >>> numbers.update((5, 6, 7))
- >>> numbers # 可以看出update()方法和add()方法的区别
- {1, 5, 6, 7}
- >>> numbers.update({4, 5}, {6, 7, 8}) # 参数为两个集合
- >>> numbers
- {1, 4, 5, 6, 7, 8}
4、集合删除项
可以使用集合的remove()方法删除某个集合中的指定项:
- >>> numbers = {1, 2, 3, 5, 7}
- >>> numbers.remove(1)
- >>> numbers
- {2, 3, 5, 7}
- >>> numbers.remove(3)
- >>> numbers
- {2, 5, 7}
如果试图删除集合中不存在的项,那么Python解释器会报错:
- >>> numbers = {1, 2, 3, 5, 7}
- >>> numbers.remove(4)
- Traceback (most recent call last):
- File "<stdin>", line 1, in <module>
- KeyError: 4
还可以使用集合的discard()方法来删除项,它和remove()方法唯一的区别是,当试图删除不存在的项时,discard()方法并不会报错,而是什么也不会发生:
- >>> numbers = {1, 2, 3, 5, 7}
- >>> numbers.discard(1)
- >>> numbers
- {2, 3, 5, 7}
- >>> numbers.discard(3)
- >>> numbers
- {2, 5, 7}
- >>> numbers.discard(4)
- >>> numbers # 什么也没发生
- {2, 5, 7}
5、检查某个项是否在集合中
集合的in操作符用于检查指定项是否在集合中,not in操作符用于检查指定项是否不在集合中:
- >>> numbers = {1, 2, 3, 5, 7}
- >>> 1 in numbers # 1在numbers集合中,返回True
- True
- >>> 3 in numbers # 3在numbers集合中,返回True
- True
- >>> 4 in numbers # 4不在numbers集合中,返回False
- False
- >>> 4 not in numbers # not in是in的反向操作
- True
6、查看集合的长度
集合的内建函数len()用于查看集合的长度,即集合中项的个数:
- >>> empty = set()
- >>> len(empty)
- 0
- >>> numbers = {1, 2, 3, 5, 7}
- >>> len(numbers)
- 5