Python数据结构详解

数据结构是编写Python脚本的基石。它们以一种精心设计的方式存储数据,使得数据处理更加高效。因此,了解如何与数据结构协同工作是至关重要的。

集合(Set)的特性

集合是一种特殊的数据结构,具有以下特点:

  • 无序:集合中的元素没有固定的顺序。
  • 唯一性:集合中的元素必须是唯一的,不允许重复。
  • 不可变性:集合中的元素必须是不可变的,即它们的状态不能被改变。

由于集合是无序的,不能对集合执行索引和切片操作。同时,集合中不能包含可变对象,如列表。集合的一个常见用途是从组合或序列中移除重复项。

集合的创建和基本操作

在本报告中,将探讨集合的5个常用操作。首先,来看如何创建一个集合。可以使用集合构造函数来从不同的集合创建一个集合。

mylst = ['A', 'A', 'B', 'A', 'C', 'B'] myst = set(mylst) print(myst) # 输出: {'A', 'B', 'C'}

从一个列表中创建了一个集合,集合只包含列表中的唯一元素。集合构造函数也可以应用于NumPy数组。以下是相关代码:

import numpy as np arr = np.random.randint(0, 5, size=20) myst = set(arr) print(arr) # 输出: [4 0 4 3 1 1 3 0 0 1 3 4 0 3 2 4 1 4 3 3] print(myst) # 输出: {0, 1, 2, 3, 4}

集合的五个基本操作

1. 添加和删除元素

添加和删除元素是集合操作中最基本的方法。使用add和remove方法可以实现这一功能:

myst.add(5) print(myst) # 输出: {0, 1, 2, 3, 4, 5} myst.add(4) print(myst) # 输出: {0, 1, 2, 3, 4, 5} myst.remove(4) print(myst) # 输出: {0, 1, 2, 3, 5}

2. 更新集合

更新集合意味着将另一个集合的元素添加到原始集合中。以下是如何更新集合的示例:

myst = set([0, 1, 2, 3, 5]) myotherst = set([3, 4, 5, 6, 7]) myst.update(myotherst) print(myst) # 输出: {0, 1, 2, 3, 4, 5, 6, 7}

也可以将集合与列表或元组等其他数据结构一起更新。

myst = set([0, 1, 2, 3, 5]) mylst = [1, 2, 10, 11, 12] myst.update(mylst) print(myst) # 输出: {0, 1, 2, 3, 5, 10, 11, 12}

3. 集合合并

更新方法会就地修改集合,这意味着它会改变原始集合。在某些情况下,可能需要合并多个集合而不更新原始集合。union方法可以合并两个集合,可以将其结果赋值给一个新的变量。

myst = {'A', 'B', 'C'} newst = {'B', 'C', 'D', 'E'} newst2 = {1, 2, 3} combinedst = myst.union(newst).union(newst2) print(myst) # 输出: {'A', 'B', 'C'} print(combinedst) # 输出: {'A', 1, 2, 'D', 'E', 3, 'B', 'C'}

4. 比较集合

两个集合可以根据它们包含的元素进行比较。可以使用issuperset和issubset方法来比较两个集合。

A = {1, 2, 3, 4, 5} B = {1, 4, 5} C = {1, 4, 6} A.issuperset(B) # 输出: True B.issubset(A) # 输出: True A.issuperset(C) # 输出: False

如果两个集合包含相同的元素,它们可以被认为是彼此的超集和子集。

D = {1, 4, 5} E = {1, 4, 5} D.issuperset(E) # 输出: True D.issubset(E) # 输出: True

5. 交集和差集

集合理论在很多方面与数学中的维恩图相似。可能对一个集合中的元素感兴趣,但不是另一个集合中的元素。此外,可能需要找出两个集合共有的元素。difference和intersection方法可以用来实现这些操作。

A = {1, 2, 3, 4, 5} B = {3, 4, 5, 6, 7, 8} A.difference(B) # 输出: {1, 2} A.intersection(B) # 输出: {3, 4, 5} B.difference(A) # 输出: {6, 7, 8}

集合的分布不影响交集的确定,但差集的确定是基于顺序的。A与B的差集包括了A中有而B中没有的元素,反之亦然。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485