page contents

Python中的集合及相关操作详述

Python中的集合,和数学中的集合概念一样,用来保存不重复的元素,即集合中的元素都是唯一的,互不相同。

1.集合

1.1集合的介绍

Python中的集合,和数学中的集合概念一样,用来保存不重复的元素,即集合中的元素都是唯一的,互不相同。

从形式上看,和字典类似,Python 集合会将所有元素放在一对大括号 {} 中,相邻元素之间用“,”分隔,如下所示:

{element1,element2,...,elementn}

其中,elementn 表示集合中的元素,个数没有限制。

从内容上看,同一集合中,只能存储不可变的数据类型,包括整形、浮点型、字符串、元组,无法存储列表、字典、集合这些可变的数据类型,否则 Pycharm就会抛出 TypeError 错误。比如说:

a = {{'a': 1}}
print(a)
b = {[1, 2, 3]}
print(b)
c = {{1, 2, 3}}
print(c)

运行结果:

Traceback (most recent call last):
  File "E:/实现代码/text.py", line 1, in <module>
   a = {{'a': 1}}
TypeError: unhashable type: 'dict'

Traceback (most recent call last):
 File "E:/实现代码/text.py", line 3, in <module>
   b = {[1, 2, 3]}
TypeError: unhashable type: 'list'

Traceback (most recent call last):
 File "E:/实现代码/text.py", line 5, in <module>
   c = {{1, 2, 3}}
TypeError: unhashable type: 'set'

并且需要注意的是,数据必须保证是唯一的,因为集合对于每种数据元素,只会保留一份。例如:

a = {1, 2, 1, (1, 2, 3), 'c', 'c'}
print(a)

运行结果:

{1, 2, 'c', (1, 2, 3)}

由于 Python 中的 set 集合是无序的,所以每次输出时元素的排序顺序可能都不相同。

1.2 Python创建set集合

Python 提供了 2 种创建 set 集合的方法,分别是使用 {} 创建和使用 set() 函数将列表、元组等类型数据转换为集合。

1.2.1使用 {} 创建

在 Python 中,创建 set 集合可以像列表、元素和字典一样,直接将集合赋值给变量,从而实现创建集合的目的,其语法格式如下:

setname = {element1,element2,...,elementn}

其中,setname 表示集合的名称,起名时既要符合 Python 命名规范,也要避免与 Python 内置函数重名。

举个例子:

a = {1, 'c', 1, (1, 2, 3), 'c'}
print(a)

运行结果:

{'c', 1, (1, 2, 3)}

1.2.2 set()函数创建集合

set() 函数为 Python 的内置函数,其功能是将字符串、列表、元组、range 对象等可迭代对象转换成集合。该函数的语法格式如下:

setname = set(iteration)

其中,iteration 就表示字符串、列表、元组、range 对象等数据。

set1 = set("www.baidu.com")
set2 = set([1, 2, 3, 4, 5])
set3 = set((1, 2, 3, 4, 5))
print("set1:", set1)
print("set2:", set2)
print("set3:", set3)

运行结果:

set1: {'u', 'c', 'w', 'm', 'o', 'b', 'a', 'i', '.', 'd'}
set2: {1, 2, 3, 4, 5}
set3: {1, 2, 3, 4, 5}

注意,如果要创建空集合,只能使用 set() 函数实现。因为直接使用一对 {},Python 解释器会将其视为一个空字典。

1.3 Python访问set集合元素

由于集合中的元素是无序的,因此无法向列表那样使用下标访问元素。Python 中,访问集合元素最常用的方法是使用循环结构,将集合中的数据逐一读取出来。

例如:

a = {1, 'c', 1, (1, 2, 3), 'c'}
for i in a:
   print(i, end=' ')

运行结果:

1 (1, 2, 3) c 

1.4 Python删除set集合

和其他序列类型一样,手动函数集合类型,也可以使用 del() 语句,例如:

a = {1, 'c', 1, (1, 2, 3), 'c'}
print(a)
del (a)
print(a)

运行结果:

{1, (1, 2, 3), 'c'}
Traceback (most recent call last):
 File "E:/实现代码/text.py", line 4, in <module>
   print(a)
NameError: name 'a' is not defined

Python set 集合最常用的操作是向集合中添加、删除元素,以及集合之间做交集、并集、差集等运算。

1.5向 set 集合中添加元素

set 集合中添加元素,可以使用 set 类型提供的 add() 方法实现,该方法的语法格式为:

setname.add(element)

其中,setname 表示要添加元素的集合,element 表示要添加的元素内容。

需要注意的是,使用 add() 方法添加的元素,只能是数字、字符串、元组或者布尔类型(True 和 False)值,不能添加列表、字典、集合这类可变的数据,否则 Python 解释器会报 TypeError 错误。例如:

a = {1, 2, 3}
a.add((1, 2))
print(a)
a.add([1, 2])
print(a)

运行结果:

Traceback (most recent call last):
{(1, 2), 1, 2, 3}
 File "E:/实现代码/text.py", line 4, in <module>
   a.add([1, 2])
TypeError: unhashable type: 'list'

1.6从set集合中删除元素

删除现有 set 集合中的指定元素,可以使用 remove() 方法,该方法的语法格式如下:

setname.remove(element)

使用此方法删除集合中元素,需要注意的是,如果被删除元素本就不包含在集合中,则此方法会抛出 KeyError 错误,例如:

a = {1, 2, 3}
a.remove(1)
print(a)
a.remove(1)
print(a)

运行结果:

Traceback (most recent call last):
{2, 3}
 File "E:/实现代码/text.py", line 4, in <module>
   a.remove(1)
KeyError: 1

上面程序中,由于集合中的元素 1 已被删除,因此当再次尝试使用 remove() 方法删除时,会引发 KeyError 错误。

如果我们不想在删除失败时令解释器提示 KeyError 错误,还可以使用 discard() 方法,此方法和 remove() 方法的用法完全相同,唯一的区别就是,当删除集合中元素失败时,此方法不会抛出任何错误。

例如:

a = {1, 2, 3}
a.remove(1)
print(a)
a.discard(1)
print(a)

运行结果:

{2, 3}
{2, 3}

1.7 Python set集合做交集、并集、差集运算

集合最常做的操作就是进行交集、并集、差集以及对称差集运算,首先有必要给大家普及一下各个运算的含义。

attachments-2021-04-L0D0IzPt608ba4af676a2.png

上图中,有 2 个集合,分别为 set1={1,2,3} 和 set2={3,4,5},它们既有相同的元素,也有不同的元素。以这两个集合为例,分别做不同运算的结果如下表所示。

attachments-2021-04-NiKkGwUu608ba49d2d199.png

set1={1,2,3}
set2={3,4,5}
# 交集操作
print(set1.intersection(set2))
print(set1 & set2)
# 并集操作
print(set1.union(set2))
print(set1 | set2)
# 差集操作
print(set1.difference(set2))
print(set1 - set2)
# 对称差集
print(set1.symmetric_difference(set2))
print(set1 ^ set2)

运行结果:

{3}
{3}
{1, 2, 3, 4, 5}
{1, 2, 3, 4, 5}
{1, 2}
{1, 2}
{1, 2, 4, 5}
{1, 2, 4, 5}
  • 发表于 2021-04-30 14:37
  • 阅读 ( 818 )
  • 分类:Python开发

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
Cara
Cara

36 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1470 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章