1. 首页
  2. 技术文章

27、Python集

在本教程中,您将学习有关Python集的所有知识。如何创建它们,添加元素或从中删除元素,以及在Python中对集合执行的所有操作。

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

但是,集合本身是可变的。我们可以从中添加或删除项目。

集还可以用于执行数学集运算,例如并集,交集,对称差等。

创建Python集

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

它可以具有任意数量的项目,并且它们可以具有不同的类型(整数,浮点数,元组,字符串等)。但是集合不能具有可变元素,例如列表,集合或字典作为其元素。

# Different types of sets in Python
# set of integers
my_set = {1, 2, 3}
print(my_set)

# set of mixed datatypes
my_set = {1.0, "Hello", (1, 2, 3)}
print(my_set)

输出

{1, 2, 3}
{1.0, (1, 2, 3), 'Hello'}

也尝试以下示例。

# set cannot have duplicates
# Output: {1, 2, 3, 4}
my_set = {1, 2, 3, 4, 3, 2}
print(my_set)

# we can make set from a list
# Output: {1, 2, 3}
my_set = set([1, 2, 3, 2])
print(my_set)

# set cannot have mutable items
# here [3, 4] is a mutable list
# this will cause an error.

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

输出

{1, 2, 3, 4}
{1, 2, 3}
Traceback (most recent call last):
  File "<string>", line 15, in <module>
    my_set = {1, 2, [3, 4]}
TypeError: unhashable type: 'list'

创建一个空集有点棘手。

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

# Distinguish set and dictionary while creating empty set

# initialize a with {}
a = {}

# check data type of a
print(type(a))

# initialize a with set()
a = set()

# check data type of a
print(type(a))

输出

<class'dict'>
<class'set'>

在Python中修改集合

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

我们无法使用索引或切片来访问或更改集合的元素。设置数据类型不支持它。

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

# initialize my_set
my_set = {1, 3}
print(my_set)

# my_set[0]
# if you uncomment the above line
# you will get an error
# TypeError: 'set' object does not support indexing

# add an element
# Output: {1, 2, 3}
my_set.add(2)
print(my_set)

# add multiple elements
# Output: {1, 2, 3, 4}
my_set.update([2, 3, 4])
print(my_set)

# add list and set
# Output: {1, 2, 3, 4, 5, 6, 8}
my_set.update([4, 5], {1, 6, 8})
print(my_set)

输出

{1,3}
{1,2,3}
{1,2,3,4}
{1,2,3,4,5,6,8}

从集合中删除元素

特定项目可以从使用该方法的一组被移除discard()remove()

两者之间的唯一区别是,discard()如果元素不存在于集合中,则该函数将使集合保持不变。另一方面,该remove()函数将在这种情况下引发错误(如果集合中不存在元素)。

以下示例将说明这一点。

# Difference between discard() and remove()

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

# discard an element
# Output: {1, 3, 5, 6}
my_set.discard(4)
print(my_set)

# remove an element
# Output: {1, 3, 5}
my_set.remove(6)
print(my_set)

# discard an element
# not present in my_set
# Output: {1, 3, 5}
my_set.discard(2)
print(my_set)

# remove an element
# not present in my_set
# you will get an error.
# Output: KeyError

my_set.remove(2)

输出

{1, 3, 4, 5, 6}
{1, 3, 5, 6}
{1, 3, 5}
{1, 3, 5}
Traceback (most recent call last):
  File "<string>", line 28, in <module>
KeyError: 2

同样,我们可以使用pop()方法删除并返回一个项目。

由于set是无序数据类型,因此无法确定将弹出哪个项目。这是完全任意的。

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

# initialize my_set
# Output: set of unique elements
my_set = set("HelloWorld")
print(my_set)

# pop an element
# Output: random element
print(my_set.pop())

# pop another element
my_set.pop()
print(my_set)

# clear my_set
# Output: set()
my_set.clear()
print(my_set)

print(my_set)

输出

{'H', 'l', 'r', 'W', 'o', 'd', 'e'}
H
{'r', 'W', 'o', 'd', 'e'}
set()

Python设置操作

集合可用于执行数学集合运算,例如并集,交集,差和对称差。我们可以使用运算符或方法来做到这一点。

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

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

设置联盟

在Python中设置联盟
在Python中设置联盟

联盟 一种 和  是两个集合中所有元素的集合。

联合使用|运算符执行。使用该union()方法可以完成相同的操作。

# Set union method
# initialize A and B
A = {1, 2, 3, 4, 5}
B = {4, 5, 6, 7, 8}

# use | operator
# Output: {1, 2, 3, 4, 5, 6, 7, 8}
print(A | B)

输出

{1,2,3,4,5,6,7,8}

在Python shell上尝试以下示例。

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

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

设置相交

在Python中设置交集
在Python中设置交集

的交点 一种 和  是在这两个集合中都通用的一组元素。

交点使用&运算符执行。使用该intersection()方法可以完成相同的操作。

# Intersection of sets
# initialize A and B
A = {1, 2, 3, 4, 5}
B = {4, 5, 6, 7, 8}

# use & operator
# Output: {4, 5}
print(A & B)

输出

{4,5}

在Python shell上尝试以下示例。

# use intersection function on A
>>> A.intersection(B)
{4, 5}

# use intersection function on B
>>> B.intersection(A)
{4, 5}

设置差异

在Python中设置差异
在Python中设置差异

集合的差异  从集合 一种一种 — )是一组仅在 一种 但不在 。相似地, — 一种 是一组元素  但不在 一种

差异是使用-运算符执行的。使用该difference()方法可以完成相同的操作。

# Difference of two sets
# initialize A and B
A = {1, 2, 3, 4, 5}
B = {4, 5, 6, 7, 8}

# use - operator on A
# Output: {1, 2, 3}
print(A - B)

输出

{1,2,3}

在Python shell上尝试以下示例。

# use difference function on A
>>> A.difference(B)
{1, 2, 3}

# use - operator on B
>>> B - A
{8, 6, 7}

# use difference function on B
>>> B.difference(A)
{8, 6, 7}

设置对称差异

在Python中设置对称差异
在Python中设置对称差异

的对称差异 一种 和  是一组元素 一种 和  但不能同时使用两者(不包括交叉路口)。

对称差使用^运算符执行。使用该方法可以完成相同的操作symmetric_difference()

# Symmetric difference of two sets
# initialize A and B
A = {1, 2, 3, 4, 5}
B = {4, 5, 6, 7, 8}

# use ^ operator
# Output: {1, 2, 3, 6, 7, 8}
print(A ^ B)

输出

{1,2,3,6,7,8}

在Python shell上尝试以下示例。

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

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

其他Python设置方法

设置方法有很多,上面我们已经使用了其中的一些方法。以下是set对象可用的所有方法的列表:

方法 描述
添加() 将元素添加到集合中
清除() 从集合中删除所有元素
复制() 返回集合的副本
区别() 将两个或多个集合的差值作为新集合返回
Difference_update() 从该集合中删除另一个集合的所有元素
丢弃() 如果元素是成员,则将其从集合中移除。(如果元素不在集合中,则不执行任何操作)
路口() 返回两个集合的交集作为新集合
junction_update() 用自身和另一个的交集更新集合
isdisjoint() True如果两个集合的交点为空,则返回
issubset() 返回True另一个集合是否包含此集合
issuperset() True如果此集合包含另一个集合,则返回
流行音乐() 删除并返回一个任意set元素。KeyError如果集合为空则引发
去掉() 从集合中删除一个元素。如果元素不是成员,则引发一个KeyError
symmetric_difference() 将两个集合的对称差作为新集合返回
symmetric_difference_update() 用本身和另一个的对称差异更新一个集合
联盟() 返回新集合中集合的并集
更新() 用自身和其他元素的并集更新集合

其他设置操作

设置会员资格测试

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

# in keyword in a set
# initialize my_set
my_set = set("apple")

# check if 'a' is present
# Output: True
print('a' in my_set)

# check if 'p' is present
# Output: False
print('p' not in my_set)

输出

True
False

遍历一组

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

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

带内置功能

内置函数喜欢all()any()enumerate()len()max()min()sorted()sum()等。通常与集用于执行不同的任务。

功能 描述
全部() 返回True如果集合中的所有元素都为真(或者,如果设置为空)。
任何() True如果集合中的任何元素为true,则返回。如果集合为空,则返回False
枚举() 返回一个枚举对象。它包含一组中所有项目的索引和值。
len() 返回集合中的长度(项目数)。
最大限度() 返回集合中最大的项目。
min() 返回集合中最小的项目。
sorted() 从集合中的元素返回一个新的排序列表(不对集合本身进行排序)。
和() 返回集合中所有元素的总和。

Python Frozenset

Frozenset是具有集合特征的新类,但是一旦分配,其元素将无法更改。元组是不可变列表,而冻结集是不可变集。

可变的集合不可散列,因此不能用作字典键。另一方面,frozenset是可哈希化的,可用作字典的键。

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

此数据类型支撑件的方法,如copy()difference()intersection()isdisjoint()issubset()issuperset()symmetric_difference()union()。由于不可变,因此没有添加或删除元素的方法。

# Frozensets
# initialize A and B
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'
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站不拥有所有权,不承担相关法律责任。如发现有侵权/违规的内容, 联系QQ1841324605,本站将立刻清除。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

联系我们

服务热线:130-0886-1890

QR code