前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python入门(9)

Python入门(9)

作者头像
高一峰
发布2020-09-22 09:49:10
5930
发布2020-09-22 09:49:10
举报
文章被收录于专栏:高渡号外高渡号外
Python入门(9/18)

第九节 数据结构:列表

大家好,在我们学习了python的模块以后,我们几乎可以编写完整的Python应用程序,甚至面对一些相对复杂的应用需求,我们还能通过包和模块来搭建一个漂亮的系统架构。

但是,假如我们遇到的所谓的复杂的应用需求,并不只是业务逻辑上的复杂,而是数据结构上的复杂呢?所谓数据结构上的复杂,比方说,数据量不仅大,而且各种不同的类型和特征,都需要我们区别对待。那么,我们对数据的理解,仅仅建立在整数、小数、变量之类的概念之上,是远远不够的。事实上,我们编程要解决的问题,往往都不是纯字据类型的,很多非数字型的对象,恰好才是我们真正要处理的对象。而且,它们根据研究对象的特征,我们可以归纳出一些具有相同特性的数据来,我们把它们归集起来,进行相似的处理,效率应该会高很多,这是一个基本的思想。

基于这样的思想,今天开始,我们要进一步学习更为复杂的数据类型,也就是Python所谓四大数据结构。

在开始之前,我们还需要花一点时间,来建立一个非常重要的认知,在实际处理问题的过程中,我们总是会面临大量的数据,甚至于,我们可以理解为,在现实的世界里,解决问题的本身,就是处理数据。离开了数据,任何程序的方法都将是“无米之炊”。

我们很容易发现,几乎,每一门计算机语言都在强调万物皆对象,但是,解决问题,最终还是要靠数据处理。所以,万物皆对象的背后,实际上意味着万物皆数据。因为,有了数据,就可以通过建立合适的模型来解决相应的问题。所以,如何理解对象和数据,并建立相应的解决问题的方案,才是我们程序员需要具备的核心思维能力。

学术上,它叫做数据结构与算法。

你有没有注意到,前面我们所有列举的应用示例中,我们之所以运用一些表达式和流程控制语句,甚至函数、模块等技术,其实,都是为了处理一些变量,包括通过赋值、运算的操作,最终实现数据处理,返回我们想要的结果。

编程的真相就是:好看的代码流程,都只是手段,处理数据才是目的。

这其中,变量就是最基本的数据,处理数据的方法,就是所谓的算法。算法如精灵,千变万化,依赖于我们的智慧。但数据是真实的客观存在,如何将现实世界的对象,恰当地转化为我们方便处理的数据,就是我们需要修炼的功夫!所以,今天的课程,我们开始重点介绍Python的数据结构。

数据结构(Data Structures)亦如其名,从Python语法的角度,它只是一种结构,我们可以形象地理解它是可以存放数据的盒子,不同的数据结构,代表了不同类型的盒子。准确的说,它们是用来存储一系列相关数据的集合。这个描述里包含有三层含义:

1、关键词“一系列”,表示数据一般不是孤立存在的。

2、关键词“相关”,表示能够存储在一起的数据,具有相关性。

3、关键词“集合”,借用了数学的概念,表示数据存在的方式具有可操作性,比如添加、修改、删除、查询、排序、合并 ... 等等。

下面我们来看看Python都有些什么样的数据结构?

除了无处不在的常量和变量作为最基本的数据类型以外,Python 中还有四种内置的数据结构。它将成为我们实现对象数据化和进行数据处理的利器,最大限度地熟练使用它们,你才能真正悟出其中的妙处!

  • 列表(List)
  • 元组(Tuple)
  • 字典(Dictionary)
  • 集合(Set)

限于篇幅,我们将分四节课来分别介绍这四大数据结构。今天,重点讲列表(list)

1、列表(list)

Python的列表(list),是一种灵活的有序对象的集合。我们前面讲过字符串是一种序列,列表显然也是一种序列。但是,列表和字符串不同。

1、列表可以包含任何种类的对象,甚至可以嵌套,一个列表中可以包含另一个列表作为其中一个对象。

2、列表包含的都是可变对象,支持实时修改(原处修改)。

3、列表可以根据需要增加,或减少。

4、借助列表,我们几乎可以通过脚本创造和处理任意复杂的数据信息。

所以,列表极其重要,应用极为普遍。

2、创建一个列表

将用逗号分隔的对象置于一对方括号之中,就创建了一个列表。

说明:当一个列表赋值给一个变量名,那么,我们就将这个变量作为列表的名称。(本质上是在列表对象和变量名之间创建了一个引用),请注意如何定义一个空的列表和只有一个单项的列表。

3、访问列表中的值

既然列表是一个序列,那么,序列类型的数据都有索引和索引对应的值。因此,我们可以使用下标索引来访问列表中的值。

如下示例:list_1.py。

请注意,上例中,我们用到了所谓切片操作的概念。这里,补充讲解一下:

(1)切片操作是专门针对序列类型数据所进行的一种分段操作行为。

(2)切片是一个序列数据的其中一段。

(3)切片的方法,以list数据为例:list[a:b:c],它会得到一个切片,这个切片是从list数据的a索引位置开始,为0时可省略;到b前面结束,如果直接到末尾,可省略;c为切片方向,默认正向,可省略。

(4)完整的理解切片,我们还需要知道有一种不常用的索引存在,那就是反向索引,它默认从序列的结尾处开始为-1。

4、更新列表

我们可以使用重新赋值、append()方法、del语句对列表的数据项进行修改或更新。

1、通过索引,直接为指定下标的项重新赋值。

2、使用append()方法向列表的末尾追加新的项。

3、使用del语句,通过索引删除指定下标的项。

5、列表的操作符

列表对 + 和 * 的操作符与字符串相似。

+ 号用于组合列表

* 号用于重复列表

PS:尽管几乎所有的序列(包括字符串)都支持 + 号的合并操作,但是,加号 + 两边必须是两个相同类型的序列。不可以把一个列表和一个字符串加在一起!

6、列表操作的函数

(1)、len(list):返回列表元素的个数。

(2)、max(list):返回列表元素最大值。

(3)、min(list):返回列表元素最小值

(4)、list(seq):将元组转换为列表,下一节马上介绍元组。

(5)、range(start, stop[, step]):创建一个整数列表,一般用在 for 循环中。

7、列表操作的方法

(1)、list.append(obj):在列表末尾添加新的对象。

(2)、list.count(obj):统计某个元素在列表中出现的次数。

(3)、list.index(obj):从列表中找出某个值第一个匹配项的索引位置。

(4)、list.insert(index, obj):将对象插入列表(指定索引位置的前面)。

(5)、list.pop(obj=list[-1]):移除列表中的一个元素(默认最后一个元素),并返回该元素的值。

(6)、list.remove(obj):移除列表中某个值的第一个匹配项。

(7)、list.reverse():对原列表进行反向排列。

(8)、list.sort([func]):对原列表进行排序。

(9)、list.extend(seq):在列表末尾追加另一个序列中的值。

8、列表的合并与追加

1、list列表的合并运算使用“+”号,它将生成一个新的列表。

2、append(obj):在列表末尾添加新对象,用新的对象来扩展原来的列表。

3、extend(seq):在列表末尾追加另一个序列中的值,用新列表扩展原来的列表。

4、请注意下面最后一个示例的情形,字符串作为一个序列而不是一个整体被追加进来。

小结

这一节,我们开始深入接触和了解Python的数据结构,并重点介绍了列表及其创建和使用的方法。

预告

下节课,我们继续介绍Python数据结构:元组,它也是Python中最常用的数据结构之一。显然,它和列表有相似和不同之处,在数据处理上,它有一种完全不同的操作魅力。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-06-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 高渡号外 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
大数据
全栈大数据产品,面向海量数据场景,帮助您 “智理无数,心中有数”!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档