python数据结构的列表_一点一点学Python——Python 3 数据结构之列表

Python 3 数据结构之列表

列表是按照顺序排列的数据集合。因为能将单个数据组合起来,方便集中访问和管理,列表在所有编程语言中都是一种非常重要的数据结构。下面,我们简单介绍一下列表的创建、访问、添加、删除、索引、选取、复制等操作。

7fcdb5a1de3a4b98a83830248a149c18.png

创建列表

在 Python 中,列表用方括号 [] 、list()函数以及列表推导的方式来定义。

方括号的方式是最简单、最常用的方式。

a447bcbbe7b851d8eaa445a6326652d8.png

上面我们使用方括号定义了三个列表。可以看出,列表既可以存储同一类型的数据,也可以存储不同类型的数据。事实上,列表中的元素可以是任何合法的 Python 对象,包括列表自身,就是说,可以创建包含列表的列表。

有时我们可能不想从头创建一个列表,而是利用已有的数据产生一个列表,这时候 list() 函数就配上用场了,其可以将其它数据结构转换为列表。

dd7d543f4cbc104d90d199d7ea9c7f9f.png

如果需要创建的是数值型列表,且有一定的规律,比如等差数列,可以用先用 range() 函数产生一个序列,然后用 list() 函数将其转换为列表。

3b133cd9b0e48a4009b04e8638a0f4eb.png

还有一种更加灵活的列表创建方式,即通过解析或者推导的方式产生列表。

190346308ecc97917b771a72a37e0a4d.png

在上面的例子中,我们在方括号 [] 里定义了给一个表达式,用于生成列表项的值。其含义很直观,就是用 1...5 的值当做半径计算圆的面积,实际上这个表达式是 for 表达式的变种,后面不加冒号且,计算值的表达式 round(math.pi r r,2) 在 for 之前。 import.math 是引入了 math 模块,以便使用圆周率常数。

访问元素

列表是按照顺序排列的,我们可以用元素在列表中的位置来访问。和绝大部分编程语言一样,Python 的位置(下标、索引)是从 0 开始的,就是说,第一个元素的下标是 0 而不是 1。因此最大的下标数是元素个数减1。若超出最大下标范围, Python 会抛出IndexError。

4888efa220359d5589925bc792ab79f0.png

修改、添加、移除元素

修改元素非常简单和直观,直接通过下标赋值即可。当然,同上面一样,列表的下标必须在范围内,否则会抛出 IndexError。

573ff010e7d0e76047d1b45543a7a96b.png

若想在列表的尾部追加元素,可以使用列表的 append() 方法。

e458993e7c751929f900d3f2fc60e1fd.png

append() 方法不够灵活,只能在尾部添加元素。若想在指定位置添加元素,可以使用 insert() 方法。

2de755e89fac48c84fb7eaa4cf002c46.png

从列表中移除元素有两种方式,一种是直接移除,不返回被移除的元素,用 Python 语句 del 实现。一种是从给列表中移除元素并返回被移除的值,用列表的方法 pop() 实现。

88808d382245685b4fd7d91d2e810eb0.png

查询、索引元素

可以通过 index() 方法获取指定元素在列表中第一次出现的位置,若列表中不存在该元素,则抛出 ValueError。

5d9adfdc333dd4ce901529d414517137.png

在上面的例子中,我们若用index() 查询列表中不存在的值。这种情况,有两种办法可以应对,一是异常处理,这是一种事后的补救,二是首先判断列表中有没有这个值,然后再获取索引,这是一种更加积极的事前预防策略。

判断一个值是否在列表中最简单的方法有两种。一是 in 语句,是一种典型的 Python 风格语句。二是列表的 count() 函数,若 count 函数返回的值为0,则没有该值,这是典型的面向对象的方法,我个人更喜欢第二种。

908e665081cbd601313c80f75087343b.png

前面我们介绍过从列表中移除元素的方法,只介绍了 del 语句 和 pop() 方法。实际上,还可以直接从列表中移除具有指定值的元素。之所以前面没介绍,是因为效果是先找到该元素的索引,再用 del 或者 pop() 移除。

202e21ed88720d91464c129b2925b064.png

过滤、选取、复制列表

从一大堆数据中选取符合条件的数据,是非常常用的功能需求。在 Python 中,可以用下标表达式来选取列表中的元素,其格式为 起始元素: 结束元素,若省略起始元素,则默认为从 0 开始;若省略结束元素,则默认为直到列表尾部。反悔的结果中不包含结束元素本身,即选取范围为 其实元素到结束元素的前一个元素。

4a34f5a1155bbbcf0bb32a1c07229e87.png

看到这儿,有很多同学可能要问了,[:]有啥意义呢,我直接使用原列表不就行了吗。其实这个事是这样的,使用下标从列表中选取数据,每次实际上是返回了一个新的列表,那么 [:] 相当于复制了整个列表。

64ad8a1e6a8fdedc6afdedcfea2a532e.png

可见 names1 和 names 已经不是同一个列表。因此,我们可以简单的用 [:] 复制列表,获取一个当前列表的备份。实际上,复制列表的方法还有两种,如下所示:

a63c47695beae6e890cd56e05564bb80.png

可以看出,至少有三种方法来复制列表,都可以达到效果。但笔者只推荐 copy() 方法。因为编程一个良好的实践就是简单、减少副作用。事实上,[:] 最主要的作用就是选取元素,list() 函数最主要的作用就是将其它数据结构转换为列表,负值列表只是其副作用。只有 copy() 完全是为复制元素定制的,因此用 copy() 方法语义会更加清晰、简单,可阅读性更强。

遍历列表

经常会需要遍历访问列表,对列表中的所有元素进行一定的操作。在 Python 中,可以使用 for 语句遍历访问列表。

017853f1fb95f6a36f4c7f7b12ccf60e.png

这里需要提醒的是, Python 完全靠缩进来判断代码之间的关系。而绝大部分编程语言用花括号 {} 来组织,因此若从其它语言转过来学 Python的,可能有些不适应。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值