Python集合(set)的用法
{}
内,不过集合只有键而没有值,类似数学里的集合,可以进行并集|
、交集&
、差集-
与异或^
等运算。另外,集合里的元素没有顺序之分,而且相同元素不可重复出现。所以集合不会记录元素的位置,当然也不支持索引或切片运算。
集合内的元素是不可变的,常见可以作为集合元素的有整数、浮点数、字符串、元组,而列表、字典、集合这类具有可变性质的数据类型则不能成为集合的元素。虽然说集合内的元素必须是不可变的,但是集合本身可以增加或删除元素,因此集合本身是可变的。
Python集合简介
集合可以使用大括号“{}”或 set() 函数建立,使用大括号“{}”建立集合的方式如下。集合名称={元素1,元素2,...}
例如下面的代码:animal = {"tiger", "sheep", "elephant"} print(animal) print(type(animal))输出结果:
{'tiger', 'sheep', 'elephant'}
<class 'set'>
animal = {} print(animal) print(type(animal))输出结果:
{}
<class 'dict'>
另外,集合的元素必须是唯一的。如果集合中有重复的元素,那么这些相同的元素只会保留一个,例如下面的代码。
animal = {"tiger", "sheep", "elephant", "lion", "sheep", "bird", "cat", "snake", "tiger"} print(animal)输出结果:
{'snake', 'lion', 'bird', 'tiger', 'elephant', 'cat', 'sheep'}
除了可以用大括号建立集合外,也可以使用 set() 函数建立集合,set() 函数所传入的参数内容可以是列表、字符串、元组。使用 set() 函数建立空集合的范例如下。
set1=set()
print(set1)
如果我们收集的数据是用列表来保存的,但不确定其中是否有重复的元素,举例来说,如果收集了一堆单词,并以列表来保存这些收集的单词,为了避免所收集的单词重复出现,此时就可以利用集合的元素的唯一性来去除重复收集的单词。
【示例1】将所收集到的列表数据中的重复元素删除,并以另外的列表来保存这些不重复的元素。代码如下:
original= ["abase", "abate", "abdicate","abhor", "abate", "acrid","appoint", "abate", "kindle"] print("单词收集的原始内容: ") print(original) set1=set(original) not_duplicatd=list(set1) print("删除重复单词后的内容: ") print(not_duplicatd) print("按照字母的顺序排列: ") not_duplicatd.sort() print(not_duplicatd)输出结果:
单词收集的原始内容:
['abase', 'abate', 'abdicate', 'abhor', 'abate', 'acrid', 'appoint', 'abate', 'kindle']
删除重复单词后的内容:
['abhor', 'abate', 'abdicate', 'abase', 'acrid', 'kindle', 'appoint']
按照字母的顺序排列:
['abase', 'abate', 'abdicate', 'abhor', 'acrid', 'appoint', 'kindle']
- 第 3 行:输出原始列表内容。
- 第 4 行:将列表转换成集合,此语句会将集合内重复的元素删除。
- 第 5 行:将没有重复元素的集合转换成列表。
- 第 7 行:输出删除重复单词后的列表内容。
- 第 9~10 行:输出按照字母的顺序排列的列表内容。
Python集合的运算
两个集合可以做并集|
、交集&
、差集-
与异或^
等运算,如表 1 所示。集合运算 | 范例 | 说明 |
---|---|---|
并集“|” | A|B | 存在集合A或存在集合B |
交集“&” | A&B | 存在集合A也存在集合B |
差集“-” | A-B | 存在集合A但不存在集合B |
异或“^” | A^B | 排除集合A与集合B中的相同元素 |
【示例2】以下范例说明了集合的运算操作方式。python代码如下:
friendA= {"Andy", "Axel", "Michael","May"} friendB = {"Peter", "Axel", "Andy","Julia"} print(friendA & friendB) print(friendA | friendB) print(friendA - friendB) print(friendA ^ friendB)输出结果:
{'Axel', 'Andy'}
{'Julia', 'Axel', 'Michael', 'Andy', 'Peter', 'May'}
{'Michael', 'May'}
{'Julia', 'Michael', 'Peter', 'May'}
但要把握一项原则,即集合的元素是不可变的,因此元组可以作为集合的元素,但是列表就不可以作为集合的元素,因为列表是一种可变的元素。
从以下两个例子可以清楚地看出如果在集合中加入列表将会产生错误。
【示例3】python代码如下:
set1={5,6,7,3,9} print(set1) set2={8,5,"happy","1235",(3,2,5),('a','b')} print(set2)输出结果:
{3, 5, 6, 7, 9}
{'happy', 5, '1235', 8, ('a', 'b'), (3, 2, 5)}
【示例4】错误代码如下:
set3={8,5,"happy","1235",[3,2,5],('a','b')} print(set3)输出结果:
File "C:\Users\27580\Desktop\2.py", line 1, in <module>
set3={8,5,"happy","1235",[3,2,5],('a','b')}
TypeError: unhashable type: 'list'
Python常用的集合函数
下面将介绍常用的集合函数。1) 新增与删除函数 add() 与 remove()
add() 函数一次只能新增一个元素,如果要新增多个元素,可以使用 update() 函数,以下是 add() 与 remove() 函数的使用方式。add() 函数使用方法。python 代码如下:
friend= {"Andy", "Axel", "Michael","May"} friend.add("Patrick") print(friend)输出结果:
{'Axel', 'Patrick', 'Andy', 'Michael', 'May'}
remove() 函数使用方法。python 代码如下:
friend= {"Andy", "Axel", "Michael","May"} friend.remove("Andy") print(friend)输出结果:
{'Axel', 'May', 'Michael'}
2) 更新或合并函数update()
update() 函数可以将两个集合合并,格式如下。set1.update(set2)
set1 会与 set2 合并,由于集合不允许有重复的元素,因此重复的元素会被忽略,例如下面的代码:friend = {"Andy", "May", "Axel"} friend.update({"Andy", "May","John","Michael"}) print(friend)输出结果:
{'Andy', 'Michael', 'Axel', 'May', 'John'}
建立集合后,可以使用 in 语句来测试元素是否在集合中,例如下面的代码。
friend = {"Andy", "May", "Axel"}
print("Mike" in friend) #输出False
【示例5】列出通过及不通过测试的同学名单。python 代码如下:
#小班制的同学清单 classmate={'陈大庆','许大为','朱时中','庄秀文','吴彩凤', '黄小惠','曾明宗','马友友','韩正文','胡天明'} test1={'陈大庆','许大为','朱时中','马友友','胡天明'} #通过中高级测试的同学名单 test2={'许大为','朱时中','吴彩凤','黄小惠','马友友','韩正文'} #通过中级测试的同学名单 goodguy=test1 | test2 print("全班有 %d 人通过两种测试中的其中一种" %len(goodguy), goodguy) bestguy=test1 & test2 print("全班有 %d 人两种测试全部通过" %len(bestguy), bestguy) poorguy=classmate -goodguy print("全班有 %d 人没有通过任何测试" %len(poorguy), poorguy)输出结果:
全班有 8 人通过两种测试中的其中一种 {'胡天明', '朱时中', '吴彩凤', '马友友', '黄小惠', '韩正文', '陈大庆', '许大为'}
全班有 3 人两种测试全部通过 {'朱时中', '许大为', '马友友'}
全班有 2 人没有通过任何测试 {'庄秀文', '曾明宗'}
- 第 2~3 行:全班名单,以列表方式保存。
- 第 4 行:通过中高级测试的同学名单,以列表方式保存。
- 第 5 行:通过中级测试的同学名单,以列表方式保存。
- 第 6~7 行:输出通过两种测试中的其中一种的人数与同学名单。
- 第 8~9 行:输出两种测试全部通过的人数与同学名单。
- 第 10~11 行:输出没有通过任何测试的人数与同学名单。
声明:《Python系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。