个性化阅读
专注于IT技术分析

python3集合set – Python3教程

上一章Python教程请查看:python3字符串string

在本文中,你将学习关于Python集的所有内容,如何创建、添加或删除元素以及在Python中对集合执行的所有操作。

Python中的集合是什么?

集合是项目的无序集合,每个元素都是唯一的(没有重复),并且必须是不可变的(不能更改)。

然而,集合本身是可变的,我们可以添加或删除其中的项。

集合可用于进行数学集合运算,如并、交、对称差分等。

如何创建一个集合?

通过将所有项(元素)放在花括号{}中,用逗号分隔或使用内置函数set()来创建集合。

它可以有任意数量的项目,它们可能是不同类型的(整数、浮点数、元组、字符串等)。但是一个集合不能有一个可变的元素,比如list、set或dictionary作为它的元素。

my_set = {1, 2, 3}
print(my_set)

my_set = {1.0, "Hello", (1, 2, 3)}
print(my_set)

也可以尝试以下示例。

# 集合没有重复元素
# 输出: {1, 2, 3, 4}
my_set = {1,2,3,4,3,2}
print(my_set)

# 集合不能有可变项
# 这里[3,4]是一个可变列表
# 使用这个列表会抛出一个错误
# TypeError: unhashable type: 'list'

#my_set = {1, 2, [3, 4]}

# 我们可以从列表中生成集合
# 输出: {1, 2, 3}
my_set = set([1,2,3,2])
print(my_set)

创建一个空集有点棘手。

空花括号{}将在Python中创建一个空字典,为了创建一个没有任何元素的集合,我们使用了没有任何参数的set()函数。

# 使用{}
a = {}

# 输出: <class 'dict'>
print(type(a))

# 使用set()
a = set()

# 输出: <class 'set'>
print(type(a))

如何在Python中更改集合?

集是可变的,但是由于它们是无序的,索引就没有意义了。

我们不能使用索引或切片访问或更改set元素,Set不支持它。

我们可以使用add()方法添加单个元素,使用update()方法添加多个元素,update()方法的参数可以是元组、列表、字符串或其他集合,在所有情况下,应该避免重复。

# 初始化
my_set = {1,3}
print(my_set)

# 使用下面的代码会抛出一个错误
# TypeError: 'set' object does not support indexing

#my_set[0]

# 添加一个元素
# 输出: {1, 2, 3}
my_set.add(2)
print(my_set)

# 添加多个元素
# 输出: {1, 2, 3, 4}
my_set.update([2,3,4])
print(my_set)

# 输出: {1, 2, 3, 4, 5, 6, 8}
my_set.update([4,5], {1,6,8})
print(my_set)

如何从集合中删除元素?

可以使用方法discard ()和remove()从集合中删除特定项。

两者之间的惟一区别是,在使用discard ()时,如果这个项在集合中不存在,它将保持不变,但是remove()将在这种情况下引发错误。

下面的示例将对此进行说明。

my_set = {1, 3, 4, 5, 6}
print(my_set)

# 输出: {1, 3, 5, 6}
my_set.discard(4)
print(my_set)

# 输出: {1, 3, 5}
my_set.remove(6)
print(my_set)

# 输出: {1, 3, 5}
my_set.discard(2)
print(my_set)

# 使用以下代码会抛出一个错误
# 输出: KeyError: 2

#my_set.remove(2)

类似地,我们可以使用pop()方法删除和返回一个项。

设置为无序,无法确定哪一项将弹出,它是完全任意的。

我们还可以使用clear()从集合中删除所有项。

my_set = set("HelloWorld")
print(my_set)

# 输出: 随机元素
print(my_set.pop())

# 输出: random element
my_set.pop()
print(my_set)

#输出: set()
my_set.clear()
print(my_set)

Python集合操作

集合可用于进行并、交、差、对称差等数学集合运算,我们可以通过操作符或方法来实现。

让我们考虑以下两组用于以下操作的集合。

>>> A = {1, 2, 3, 4, 5}
>>> B = {4, 5, 6, 7, 8}

集合的并集

Python中的集合并集

A和B的并集是来自这两个集合的所有元素的集合。

Union是使用|操作符执行的,也可以使用union()方法来完成。

A = {1, 2, 3, 4, 5}
B = {4, 5, 6, 7, 8}

# 输出: {1, 2, 3, 4, 5, 6, 7, 8}
print(A | B)

在Python shell上尝试以下示例。

>>> A.union(B)
{1, 2, 3, 4, 5, 6, 7, 8}
>>> B.union(A)
{1, 2, 3, 4, 5, 6, 7, 8}

集合的交集

Python中的集合交集

A和B的交集是两个集合中共同的一组元素。

交集使用&运算符执行,可以使用交集()方法来完成相同的任务。

A = {1, 2, 3, 4, 5}
B = {4, 5, 6, 7, 8}

# 输出: {4, 5}
print(A & B)

在Python shell上尝试以下示例。

>>> A.intersection(B)
{4, 5}
>>> B.intersection(A)
{4, 5}

集合的差集

Python中集合的差集

A和B的区别(A – B)是只在A中而不在B中存在的一组元素。

差集是用-运算符来执行的,可以使用方法difference()实现相同的功能。

A = {1, 2, 3, 4, 5}
B = {4, 5, 6, 7, 8}

# 输出: {1, 2, 3}
print(A - B)

在Python shell上尝试以下示例。

>>> A.difference(B)
{1, 2, 3}
>>> B - A
{8, 6, 7}
>>> B.difference(A)
{8, 6, 7}

集合的对称差分

Python中的集合对称差分

A和B的对称差分是A和B中的一组元素,除了它们是共同的。

对称差分是使用^运算符来实现的,可以使用symmetric_difference()方法来完成相同的工作。

A = {1, 2, 3, 4, 5}
B = {4, 5, 6, 7, 8}

# 输出: {1, 2, 3, 6, 7, 8}
print(A ^ B)

在Python shell上尝试以下示例。

>>> A.symmetric_difference(B)
{1, 2, 3, 6, 7, 8}
>>> B.symmetric_difference(A)
{1, 2, 3, 6, 7, 8}

不同的Python集合方法

有许多set方法,其中一些我们已经在上面使用过,下面是set对象中可用的所有方法的列表。

Python集合方法

方法 描述
add() 将元素添加到集合中
clear() 从集合中移除所有元素
copy() 返回集合的副本
difference() 将两个或多个集合的差作为一个新集合返回
difference_update() 从这个集合中移除另一个集合的所有元素
discard() 如果元素是成员,则从集合中移除该元素。(如果元素不在集合中,则不执行任何操作)
intersection() 以新集合的形式返回两个集合的交集
intersection_update() 用自身与他人的交集更新集合
isdisjoint() 如果两个集合的交集为空,则返回True
issubset() 如果另一个集合包含此集合,则返回True
issuperset() 如果这个集合包含另一个集合,则返回True
pop() 移除并返回任意的集合元素。如果集合为空,则引发KeyError
remove() 从集合中移除一个元素。如果该元素不是成员,则引发密钥错误
symmetric_difference() 将两个集合的对称差作为一个新集合返回
symmetric_difference_update() 更新具有自身和他人的对称差异的集合
union() 返回新集合中集合的并集
update() 用自身和其他的并集更新集合

其他集合的操作

集合成员测试

我们可以使用关键字in来测试一个项是否存在于一个集合中。

my_set = set("apple")

# 输出: True
print('a' in my_set)

# 输出: False
print('p' not in my_set)

遍历一个集合

使用for循环,我们可以遍历集合中的每个项。

>>> for letter in set("apple"):
...     print(letter)
...    
a
p
e
l

集合的内置函数

内置函数如all()、any()、enumerate()、len()、max()、min()、sort()、sum()等常用来执行不同的任务。

集合的内置函数

函数 说明
all() 如果集合的所有元素都为真(或者集合为空),则返回True。
any() 如果集合中的任何元素为真,则返回真。如果集合为空,则返回False。
enumerate() 返回一个枚举对象。它将集合的所有项的索引和值作为一对包含。
len() 返回集合中的长度(项数)。
max() 返回集合中最大的项。
min() 返回集合中最小的项。
sorted() 从集合中的元素返回一个新的排序列表(不对集合本身排序)。
sum() 重新调整集合中所有元素的和。

Python 冻结集Frozenset

Frozenset是一个新类,它有一组的特点,但其分配元素无法改变一次,元组是不可变的列表,frozensets则是不可变的集合。

可变的集合不可散列化,所以他们不能被用作字典键,另一方面frozensets 是可散列的,并且可以作为字典的关键。

Frozensets可以使用函数frozenset ()创建。

这个数据类型支持方法像copy(), difference(), intersection(), isdisjoint(), issubset(), issuperset(), symmetric_difference() 和union(),若是不可变的则不支持添加或删除元素。

A = frozenset([1, 2, 3, 4])
B = frozenset([3, 4, 5, 6])

在Python shell上尝试这些示例。

>>> A.isdisjoint(B)
False
>>> A.difference(B)
frozenset({1, 2})
>>> A | B
frozenset({1, 2, 3, 4, 5, 6})
>>> A.add(3)
...
AttributeError: 'frozenset' object has no attribute 'add'
赞(0)
未经允许不得转载:srcmini » python3集合set – Python3教程

评论 抢沙发

评论前必须登录!