内容正文:
单元4 组合数据类型
任务4-1:利用集合删除重复值
【任务目标】
从键盘输入多个数,删除重复值后输出,程序运行结果如下。
请输入多个数(用英文逗号分隔):1,1,2,2,3,3,4,4,5,5
无重复的数据:1 2 3 4 5
【任务实施】
演示过程……
4.1 集合
Python中的集合主要用于保存不重复的元素。
Python中有set(集合)和frozenset(冻结集合)两种集合类型,后者在本书中不做介绍。本书中提及的“集合”主要指set类型的集合。
集合中的元素具有唯一、无序和不可改变等特点。集合支持数学理论中的各种集合运算。
本节主要内容:
集合常量
集合运算
集合基本操作
4.1.1 创建集合
集合对象可用花括号{}表示,其中的元素使用逗号分隔。也可用内置的set()函数创建集合对象
示例代码如下。
>>> x={1,2,3} #直接使用集合常量
>>> x
{1, 2, 3}
>>> type(x) #测试集合对象的类型名称
<class 'set'>
>>> set({1,2,3}) #用集合常量做参数创建集合对象
{1, 2, 3}
>>> set([1,2,3]) #用列表常量做参数创建集合对象
{1, 2, 3}
>>> set('123abc') #用字符串常量做参数创建集合对象
{'a', '3', 'b', 'c', '2', '1'}
>>> set() #创建空集合
set()
>>> type({}) #{}表示空字典对象
<class 'dict'>
集合中的元素不允许有重复值
在创建集合对象时,Python会自动去掉重复值
示例代码如下。
>>> {1,1,2,2}
{1, 2}
>>> set([1,1,2,2])
{1, 2}
Python 3.0还引入了集合解析构造方法,示例代码如下。
>>> {x for x in [1,2,3,4]}
{1, 2, 3, 4}
>>> {x for x in 'abcd'}
{'c', 'a', 'b', 'd'}
>>> {x ** 2 for x in [1,2,3,4]}
{16, 1, 4, 9}
>>> {x * 2 for x in 'abcd'}
{'aa', 'bb', 'cc', 'dd'}
4.1.2 集合运算
集合对象支持求长度、判断包含、求差集、求并集、求交集、求对称差和比较等运算,示例代码如下。
>>> x={1,2,'a','bc'}
>>> y={1,'a',5}
>>> len(x) #求长度:计算集合中元素的个数
4
>>> 'a' in x #判断包含:判断集合是否包括数据
True
>>> x – y #求差集:用属于x但不属于y的元素创建新集合
{2, 'bc'}
>>> x | y #求并集:用x、y两个集合中的所有元素创建新集合
{1, 2, 'a', 'bc', 5}
>>> x & y #求交集:用同时属于x和y的元素创建新集合
{1, 'a'}
>>> x ^ y #求对称差:用属于x但不属于y以及属于y但不属于x的元素创建新集合
{2, 5, 'bc'}
>>> x < y #比较:判断子集和超集的关系,x是y的子集时返回True,否则返回False
False
>>> {1,2}<x
True
4.1.3 集合基本操作
集合对象元素的值不支持修改
可以复制集合、为集合添加或删除元素
示例:
>>> x={1,2}
>>> y=x.copy() #复制集合对象
>>> y
{1, 2}
>>> x.add('abc') #为集合添加一个元素
>>> x
{1, 2, 'abc'}
>>> x.update({10,20}) #为集合添加多个元素
>>> x
{1, 2, 10, 20, 'abc'}
>>> x.remove(10) #从集合中删除指定元素
>>> x
{1, 2, 20, 'abc'}
>>> x.remove(50) #删除不存在元素时会报错
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 50
>>> x.discard(20) #从集合中删除指定元素
>>> x
{1, 2, 'abc'}
>>> x.discard(50) #删除不存在元素时不报错
>>> x.pop() #从集合中随机删除一个元素,并返回该元素。
1
>>> x
{2, 'abc'}
>>> x.clear() #删除集合中的全部元素
>>> x
set()
集合可用for循环执行迭代操作,示例代码如下。
>>> x={1,2,3}
>>> for a in x:print(a)
…
1
2
3
集合元素是不可改变的,因此不能将可变对象放入集合中。
集合对象、列表对象和字典对象均是可变对象,所以不能加入集合。
元组是不可变对象,可以作为一个元素加入集合。
>>> x={1,2}
>>> x
{1, 2}
>>> x.add({1}) #不能将集合对象加入集合
Traceback (most recent call last):
File "<pyshell#25>", line 1, in <module>
x.add({1})
TypeError: unhashable type: 'set'
>>> x.add([1,2,3]) #不能将列表对象加入集合
Traceback (most recent call last):
File "<pyshell#28>", line 1, in <module>
x.add([1,2,3]
TypeError: unhashable type: 'list'
>>> x.add({'Mon':1}) #不能将字典对象加入集合
Traceback (most recent call last):
File "<pyshell#29>", line 1, in <module>
x.add({'Mon':1})
TypeError: unhashable type: 'dict'
>>> x.add((1,2,3)) #可以将元组加入集合
>>> x
{1, 2, (1, 2, 3)}
$$