当前页面: 首页> 资讯百科

Python培训教程:数据结构

2020-06-03 16:59:18

Python里面有很多内建数据结构,数据结构(data structure)是计算机中存储、组织数据的方式。比如我们之前的课程中使用过的列表就是一种数据结构,在这里我们还会深入学习它。

一、列表

首先我们建立了一个列表a,然后调用列表的方法a.append(45)添加元素45到列表末尾。你可以看到元素45已经添加到列表的末端了。有些时候我们需要将数据插入列表的任何位置,这时我们可以使用列表的insert()方法。

列表方法count(s)会返回列表元素s的数量。我们来检查一下 45 这个元素在列表中出现了多少次。

如果你想要在列表里面移除任意指定值,你需要使用remove()方法。

现在我们反转整个列表。

怎样将一个列表的所有元素添加到另一个列表的末尾呢,可以使用列表的extend()方法。

给列表排序,我们使用列表的sort()方法,排序的前提是列表的元素是可比较的。

你也能使用 del 关键字删除指定位置的列表元素。

1.1 将列表用作栈和队列

栈是我们通常所说的一种LIFO(Last In First Out 后进先出)数据结构。它的意思是最后进来的数据第一个出来,一个最简单的例子往一端封闭的管道放入一些弹珠然后取出来,如果你想把弹珠取出来,你必须从你最后放入弹珠的位置挨个拿出来。用代码实现此原理:

上面的代码中我们使用了一个新方法pop()。传入一个参数i即pop(i)会将第i个元素弹出。

在我们日常生活中经常会遇到队列,比如售票窗口、图书馆、超市的结账出口。队列是一种在末尾追加数据以及在开始弹出数据的数据结构。与栈不同,它是FIFO(First In First Out 先进先出)的数据结构。

我们使用a.pop(0)弹出列表中第一个元素。

1.2 列表推导式

列表推导式为从序列中创建列表提供了一个简单的方法。如果没有列表推导式,一般都是这样创建列表的:通过将一些操作应用于序列的每个成员并通过返回的元素创建列表,或者通过满足特定条件的元素创建子序列。

假设我们创建一个squares列表,可以像下面这样创建:

注意for循环中被创建的名为x的变量在循环完毕后依然存在。使用如下方法,我们可以计算squares的值而不会产生任何的副作用。

squares = list(map(lambda x: x**2,range(10)))

等价于下面的列表推导式。

squares  = [x**2 for x in range(10)]

上面这个方法更加简明且易读。

列表推导式由包含一个表达式的中括号组成,表达式后面跟随一个for子句,之后可以有 0 或多个for 或if子句。结果是一个列表,由表达式依据其后面的for和if子句上下文计算而来的结果构成。

等同于:

值得注意的是在上面两个方法中的for和if语句的顺序。

列表推导式也可以嵌套。

二、元组

元组是由数个逗号分割的值组成。

你可以对任何一个元组执行拆封操作并赋值给多个变量,就像下面这样:

元组是不可变类型,这意味着你不能在元组内删除或编辑任何值。如果你尝试这些操作,将会出错。

要创建只含有一个元素的元组,在值后面跟一个逗号。

通过内建函数type()你可以知道任意变量的数据类型。还记得我们使用len()函数来查询任意序列类型数据的长度吗?

三、集合

集合是一个无序不重复元素的集。基本功能包括关系测试和消除重复元素。集合对象还支持union(联合),intersection(交),difference(差)和symmetric difference(对称差集)等数学运算。

大括号或set()函数可以用来创建集合。注意:想要创建空集合,你必须使用set()而不是{}。后者用于创建空字典。

下面是集合的常见操作:

从集合中添加或弹出元素:

四、字典

字典是无序的键值对(key:value)集合,同一个字典内的键必须是互不相同的。一对大括号{}创建一个空字典。初始化字典时,在大括号内放置一组逗号分隔的键:值对,这也是字典输出的方式,我们使用键来检索存储在字典中的数据。

创建新的键值对很简单:

使用del关键字删除任意指定的键值对:

使用in关键字查询指定的键是否存在于字典中。

必须知道的是,字典的键必须是不可变类型,比如你不能使用列表作为键。

dict()可以从包含键值对的元组中创建字典。

如果你想遍历一个字典,使用字典的items()方法。

许多时候我们需要往字典中的元素添加数据,我们首先要判断这个元素是否存在,不存在则创建一个默认值。如果在循环里执行这个操作,每次迭代都需要判断一次,降低程序性能。

我们可以使用dict.setdefault(key, default)更有效率的完成这个事情。

试图索引一个不存在的键将会抛出一个keyerror错误。我们可以使用dict.get(key, default)来索引键,如果键不存在,那么返回指定的default值。

如果你想要在遍历列表(或任何序列类型)的同时获得元素索引值,你可以使用enumerate()。

你也需要同时遍历两个序列类型,你可以使用zip()函数。

五、总结

本节Python培训教程了解了Python内置的几种常用数据结构,在写结构的过程中,不同的场景应当选取合适的数据结构。

一般来说,目前我们见到的数据结构已经够用了,不过Python中海油一些其它有用的数据结构,可以在这里了解:https://docs.python.org/3/library/datatypes.html



seo