数据结构
Posted wenxingxu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构相关的知识,希望对你有一定的参考价值。
数据结构
数据结构(Data Structures)基本上人如其名——它们只是一种结构,能够将一些数据聚合
在一起。换句话说,它们是用来存储一系列相关数据的集合。
Python 中有四种内置的数据结构——列表(List)、元组(Tuple)、字典(Dictionary)和集
合(Set)。
列表
列表 是一种用于保存一系列有序项目的集合,也就是说,你可以利用列表保存一串项目的序
列。想象起来也不难,你可以想象你有一张购物清单,上面列出了需要购买的商品,除开在
购物清单上你可能为每件物品都单独列一行,在 Python 中你需要在它们之间多加上一个逗
号。
项目的列表应该用方括号括起来,这样 Python 才能理解到你正在指定一张列表。一旦你创建
了一张列表,你可以添加、移除或搜索列表中的项目。既然我们可以添加或删除项目,我们
会说列表是一种可变的(Mutable)数据类型,意即,这种类型是可以被改变的。
有关对象与类的快速介绍
列表是使用对象与类的实例。当我们启用一个变量 i 并将整数 5 赋值给它时,你可以认为
这是在创建一个 int 类(即类型)之下的对象(即实例) i 。实际上,你可以阅读
help(int) 来了解更多内容。
一个类也可以带有方法(Method),也就是说对这个类定义仅对于它启用某个函数。只有当
你拥有一个属于该类的对象时,你才能使用这些功能。举个例子,Python 为 list 类提供了
一种 append 方法,能够允许你向列表末尾添加一个项目。例如 mylist.append(‘an item‘)
将会向列表 mylist 添加一串字符串。在这里要注意到我们通过使用点号的方法来访问对
象。
一个类同样也可以具有字段(Field),它是只为该类定义且只为该类所用的变量。只有当你
拥有一个属于该类的对象时,你才能够使用这些变量或名称。字段同样可以通过点号来访
问,例如 mylist.field 。
元组
元组(Tuple)用于将多个对象保存到一起。你可以将它们近似地看作列表,但是元组不能提
供列表类能够提供给你的广泛的功能。元组的一大特征类似于字符串,它们是不可变的,也
就是说,你不能编辑或更改元组。
元组是通过特别指定项目来定义的,在指定项目时,你可以给它们加上括号,并在括号内部
用逗号进行分隔。
元组通常用于保证某一语句或某一用户定义的函数可以安全地采用一组数值,意即元组内的
数值不会改变。
包含 0 或 1 个项目的元组
一个空的元组由一对圆括号构成,就像 myempty = () 这样。然而,一个只拥有一个项
目的元组并不像这样简单。你必须在第一个(也是唯一一个)项目的后面加上一个逗号
来指定它,如此一来 Python 才可以识别出在这个表达式想表达的究竟是一个元组还是只
是一个被括号所环绕的对象,也就是说,如果你想指定一个包含项目 2 的元组,你必
须指定 singleton = (2, ) 。
针对 Perl 程序员的提示
列表中的列表不会丢失其标识,即列表不会像在 Perl 里那般会被打散(Flattened)。这
同样也适用于元组中的元组、列表中的元组或元组中的列表等等情况。对于 Python 而
言,它们只是用一个对象来存储另一个对象,不过仅此而已。
字典
字典就像一本地址簿,如果你知道了他或她的姓名,你就可以在这里找到其地址或是能够联
系上对方的更多详细信息,换言之,我们将键值(Keys)(即姓名)与值(Values)(即地
址等详细信息)联立到一起。在这里要注意到键值必须是唯一的,正如在现实中面对两个完
全同名的人你没办法找出有关他们的正确信息。
另外要注意的是你只能使用不可变的对象(如字符串)作为字典的键值,但是你可以使用可
变或不可变的对象作为字典中的值。基本上这段话也可以翻译为你只能使用简单对象作为键
值。
在字典中,你可以通过使用符号构成 d = {key : value1 , key2 : value2} 这样的形式,来成
对地指定键值与值。在这里要注意到成对的键值与值之间使用冒号分隔,而每一对键值与值
则使用逗号进行区分,它们全都由一对花括号括起。
另外需要记住,字典中的成对的键值—值配对不会以任何方式进行排序。如果你希望为它们
安排一个特别的次序,只能在使用它们之前自行进行排序。
你将要使用的字典是属于 dict 类下的实例或对象。
序列
列表、元组和字符串可以看作序列(Sequence)的某种表现形式,可是究竟什么是序列,它
又有什么特别之处?
序列的主要功能是资格测试(Membership Test)(也就是 in 与 not in 表达式)和索引
操作(Indexing Operations),它们能够允许我们直接获取序列中的特定项目。
上面所提到的序列的三种形态——列表、元组与字符串,同样拥有一种切片(Slicing)运算
符,它能够允许我们序列中的某段切片——也就是序列之中的一部分。
集合
集合(Set)是简单对象的无序集合(Collection)。当集合中的项目存在与否比起次序或其出
现次数更加重要时,我们就会使用集合。
通过使用集合,你可以测试某些对象的资格或情况,检查它们是否是其它集合的子集,找到
两个集合的交集,等等。
引用
当你创建了一个对象并将其分配给某个变量时,变量只会查阅(Refer)某个对象,并且它也
不会代表对象本身。也就是说,变量名只是指向你计算机内存中存储了相应对象的那一部
分。这叫作将名称绑定(Binding)给那一个对象。
一般来说,你不需要去关心这个,不过由于这一引用操作困难会产生某些微妙的效果,这是
需要你注意的
总结
我们已经详细探讨了 Python 中内置的多种不同的数据结构。这些数据结构对于编写大小适中
的 Python 程序而言至关重要。
以上是关于数据结构的主要内容,如果未能解决你的问题,请参考以下文章