Python 集合

数学上有一个基础概念 -集合,上高一的时候学过。集合的作用大吗?高考必考,你说呢?

关于收藏,维基百科对其描述如下:

[En]

About collections, Wikipedia describes it as follows:

集合是基本的数学概念,它是集合论的研究对象,指具有某种特定性质的事物的总体,(在最原始的集合论─朴素集合论─中的定义,集合就是”一堆东西”。)集合里的事物(”东西”),叫作元素。若然 x 是集合 A 的元素,记作 x ∈ A。

在 Python 中,集合分为两类:

  • set:可变集合
  • frozenset:不可变集合

set 可以原地修改,或者说是可变的,也可以说是 unhashable(不可哈希)的。

frozenset,顾名思义,是一个被”冻结”的集合,不能原地修改,是 hashable(可哈希)的。

|版权声明:一去、二三里,未经博主允许不得转载。

在 Python 中,集合由内置的 set 类型定义。

要创建集合,需要将所有项(元素)放在花括号(​ ​{}​​​)内,以逗号(​ ​,​​)分隔。

一个集合可以有任意数量的元素,这些元素可以是不同的类型(例如,数字、元组、字符串等)。但是,集合不能有可变元素(例如,列表、集合或词典)。

[En]

A collection can have any number of elements, which can be of different types (for example, numbers, tuples, strings, and so on). However, the collection cannot have variable elements (for example, lists, collections, or dictionaries).

创建空集合比较特殊。在 Python 中,空花括号(​ ​{}​​)用于创建空字典。要创建一个没有任何元素的集合,使用 set() 函数(不要包含任何参数)。

集合的特性

子曰:”温故而知新,可以为师矣。”
–《论语》

回顾相关数学知识,该套教材具有以下特点:

[En]

Reviewing the relevant knowledge of mathematics, the set has the following characteristics:

  • 无序:在集合中,每个元素的状态是相同的,元素是无序的。
    [En]

    disorder: in a collection, the status of each element is the same, and the elements are disordered.

    可以在集合上定义顺序关系,在定义顺序关系后,可以根据顺序关系对元素进行排序。然而,就集合本身的特点而言,元素之间并没有必然的顺序。

    [En]

    The order relation can be defined on the set, and after the order relation is defined, the elements can be sorted according to the order relation. However, as far as the characteristics of the set itself are concerned, there is no inevitable order between elements.*

  • 异构性:集合中的任何两个元素都被认为是不同的,即每个元素只能出现一次。
    [En]

    heterogeneity: any two elements in a collection are considered to be different, that is, each element can only appear once.

    有时,您需要描述同一元素多次出现的情况,并且您可以使用多个集合,其中允许元素多次出现。

    [En]

    Sometimes you need to depict situations where the same element occurs multiple times, and you can use multiple sets, where elements are allowed to occur multiple times.*

  • 确定性:给定一个集合,任何属于或不属于该集合的元素都必须是一个或另一个,并且不允许有歧义。
    [En]

    certainty: given a set, any element that either belongs to or does not belong to the set must be one or the other, and ambiguity is not allowed.*

当然,Python 中的集合也具备这些特性:

注意: 由于集合是无序的,所以索引没有任何意义。也就是说,无法使用索引或切片访问或更改集合元素。

集合运算

数学集合运算也可以在集合之间进行(例如,并集、交集等),这可以通过相应的运算符或方法来实现。

[En]

Mathematical set operations can also be carried out between sets (for example, union, intersection, etc.), which can be realized by corresponding operators or methods.

考虑 A、B 两个集合,进行以下操作。

子集是集合的一部分,因此也称为部分集。

[En]

A subset is a set that is part of a set, so it is also called a partial set.

使用操作符 ​ &#x200B;<​< code>&#x200B; &#x6267;&#x884C;&#x5B50;&#x96C6;&#x64CD;&#x4F5C;&#xFF0C;&#x540C;&#x6837;&#x5730;&#xFF0C;&#x4E5F;&#x53EF;&#x4F7F;&#x7528;&#x65B9;&#x6CD5; issubset() &#x5B8C;&#x6210;&#x3002;<!--​<-->

一组集合的并集是这些集合的所有元素的集合,但不是其他元素的集合。

[En]

The union of a set of collections is a collection of all the elements of those collections, but not other elements.

使用操作符 ​ &#x200B;|&#x200B;​ 执行并集操作,同样地,也可使用方法 union() 完成。

两个集合 A 和 B 的交集是含有所有既属于 A 又属于 B 的元素,而没有其他元素的集合。

使用 ​ &#x200B;&&#x200B;​ 操作符执行交集操作,同样地,也可使用方法 intersection() 完成。

A 与 B 的差集是所有属于 A 且不属于 B 的元素构成的集合

使用操作符 ​ &#x200B;-&#x200B;​ 执行差集操作,同样地,也可使用方法 difference() 完成。

两个集合之间的对称差异是只属于一个集合而不属于另一个集合的元素的集合。

[En]

The symmetric difference between two sets is a set of elements that only belong to one set and not to the other.

使用 ​ &#x200B;^&#x200B;​ 操作符执行差集操作,同样地,也可使用方法 symmetric_difference() 完成。

更改集合

尽管集合不能具有可变元素,但集合本身是可变的。也就是说,您可以在其中添加或删除元素。

[En]

Although the collection cannot have mutable elements, the collection itself is mutable. That is, you can add or remove elements from it.

可以使用 add() 方法添加单个元素,使用 update() 方法添加多个元素,update() 可以使用元组、列表、字符串或其他集合作为参数。

在所有情况下,元素都不会重复。

[En]

In all cases, the element does not repeat.

从集合中删除元素

可以使用 discard() 和 remove() 方法删除集合中特定的元素。

两者之间唯一的区别在于:如果集合中不存在指定的元素,使用 discard() 保持不变;但在这种情况下,remove() 会引发 KeyError。

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

还可以使用 clear() 删除集合中的所有元素。

注意: 集合是无序的,所以无法确定哪个元素将被 pop,完全随机。

集合的方法

老规矩,利用 dir() 来查看方法列表:

如您所见,有以下方法可用:

[En]

As you can see, the following methods are available:

add()

将元素添加到集合中

clear()

删除集合中的所有元素

copy()

返回集合的浅拷贝

difference()

将两个或多个集合的差值作为新集合返回

[En]

Returns the difference of two or more sets as a new set

difference_update()

从此集合中删除另一个集合的所有元素

[En]

Remove all elements of another collection from this collection

discard()

删除集合中的元素(如果该元素不存在,则不执行任何操作)

[En]

Delete an element in the collection (if the element does not exist, no action is performed)

intersection()

将两个集合的交集作为新集合返回

[En]

Returns the intersection of two sets as a new collection

intersection_update()

使用您和另一个人的交集更新此集合

[En]

Update this collection with the intersection of yourself and another

isdisjoint()

如果两个集合有一个空交集,返回 True

issubset()

如果另一个集合包含这个集合,返回 True

issuperset()

如果这个集合包含另一个集合,返回 True

pop()

删除并返回任意的集合元素(如果集合为空,会引发 KeyError)

remove()

删除集合中的一个元素(如果元素不存在,会引发 KeyError)

symmetric_difference()

将两个集合之间的对称差作为新集合返回

[En]

Returns the symmetric difference between two sets as a new set

symmetric_difference_update()

使用您与他人之间的对称性差异来更新此集合

[En]

Update this set with the symmetry difference between yourself and another

union()

将集合的并集作为新集合返回

[En]

Returns the union of a collection as a new collection

update()

使用您和另一个人的联合更新此集合

[En]

Update this collection with the union of yourself and another

其中一些方法在上述示例中已经被使用过了,如果有方法不会用,可利用 help() 函数,查看用途及详细说明。

集合与内置函数

以下内置函数通常作用于集合以执行不同的任务。

[En]

The following built-in functions usually act on collections to perform different tasks.

all()

如果集合中的所有元素都是 True(或者集合为空),则返回 True。

any()

如果集合中的所有元素都是 True,则返回 True;如果集合为空,则返回 False。

enumerate()

返回一个枚举对象,该对象包含集合中所有元素的索引和值(对)。

[En]

Returns an enumerated object that contains the indexes and values (pairs) of all elements in the collection.

len()

返回集合的长度(元素数)

[En]

Returns the length of the collection (number of elements)

max()

返回集合中的最大项

min()

返回集合中的最小项

sorted()

从集合中的元素返回新的已排序列表(不对集合本身进行排序)

[En]

Returns a new sorted list from the elements in the collection (does not sort the collection itself)

sum()

返回集合的所有元素之和

不可变集合

frozenset 是一个具有集合特征的新类,但是一旦分配,它里面的元素就不能更改。这一点和元组非常类似:元组是不可变的列表,frozenset 是不可变的集合。

集合是 unhashable 的,因此不能用作字典的 key;而 frozensets 是 hashable 的,可以用作字典的 key。

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

frozenset 也提供了一些列方法,和 set 中的类似。

由于 frozenset 是不可变的,所以没有添加或删除元素的方法。

Original: https://blog.51cto.com/waleon/5525593
Author: waleon
Title: Python 集合

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/504688/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球