矿 仔

V1

2022/12/21阅读:14主题:默认主题

Python三:列表

列表

列表可以存储一组元素,按照一定的顺序排列的元素组成。有点类似于Java中的数组,但是对元素不限制必须是相同的类型。

如:动物列表

animals = ['dog','cat','pig']

用方括号表示列表,元素之间用逗号分隔。打印的时候方括号也会跟着一起打印出来。

再比如包含不同类型的元素列表,用户信息

user_info = ['mine',18,188]

事实这个例子不太贴切,用户信息用字典来表示更好一些,这里只是为了说明可以存储不同类型的元素。

访问元素

列表是有序的集合,访问列表的元素只需要把元素的位置(即索引,index)告诉Python即可,比如

first_element = animals[0]

animals[0]代表的意思是取列表animals中索引位置是0的元素(即列表的第一个元素)。这主要是由于在Python中,第一个列表的索引是0而不是1,事实上大多数的编程语言都采用了这种定义

如此定义的原因在于,不论是列表还是字典,这些数据结构存储的元素最终都是要分布在内存中,比如说现在存储10个元素的列表,每个元素是4个字节。那么它在内存中的分布大概如下

假设初始内存地址1000

在我们需要访问列表中数据的时候,最终计算机会通过地址去访问内存中的数据。**索引或者说是下标,实际上代表的也是偏移量(offset)**。

比如arr[0]的元素应该是落在1000-1003的内存地址中,arr[1]的元素是落在1004-1007的内存地址中,索引从0开始的计算机的寻址公式是:

a[i]_address = base_address + i * data_type_size

如果索引是从1开始的,那么计算公式为:

a[i]_address = base_address + (i-1)*type_size

相比于0开始,只是多了一个i-1的步骤,对于CPU来说就是一次减法指令,不要小看这一小步,对于列表这种底层数据结构来说,会尽可能的让性能最优的。

Python为访问列表最后一个元素提供了特殊的语法,即指定索引为-1

last_element = animals[-1]

这种负数索引也适用于倒数第二个元素(-2,倒数第三个元素(-3)用法。

可以使用列表中的值,直接打印或者用变量关联都可

操作列表中元素

首先是修改列表的元素,直接修改对应索引位置的元素即可,如下

修改索引位置是0的元素

animals[0] = 'duck'

打印看下效果

可以看到已经从dog变成了duck。

接着添加元素,有几种添加元素的方式:

方式一、在列表末尾添加元素

这里主要利用到一个append方法,具体用法是

列表.append(要添加的元素)

演示一下:

animals.append('tiger')

看下效果:

可以看出添加成功了。

方式二、在任意位置插入元素

主要利用insert方法,接收两个参数,一个是索引位置即要将元素插在哪里,一个是要插入的元素,具体用法如下:

animals.insert(2,'lion')

我在索引位置2处插入一个lion,看下效果:

可以看出插入成功了,并且这个原来这个位置及之后的元素都右移一位。

解下来是删除元素,也有几种方式可以删除

方式一、del语句可以删除任意位置的元素,并且删除以后就不能再访问这个删除的元素了,具体用法

del 列表[索引]

比如删除animals中第三个元素(即索引为2)

del animals[2]

之前插入的lion元素已经被删除了。

方式二、使用pop方法删除元素

这种方式删除的元素还可以继续利用,pop的意思是弹出,可以理解从列表中弹出来,有点类似数据结构中的栈。pop弹出列表末尾的元素,这也有点类似于弹出栈顶的元素。栈的特性后入先出。

这里弹出了末尾的元素,并且用变量进行了接收,后面可以利用这个弹出的元素。

还可以指定位置弹出元素。比如指定弹出索引是0的元素

方式三、根据值删除元素

有时候并不知道值的位置,可以根据元素的值删除,通过使用remove方法。看下animals列表,还剩两个元素cat和pig。

演示根据元素cat的值去删除该元素

deleted_element = animals.remove('cat')

方法remove只会删除第一个指定的值,如果满足条件的值有多个,需要利用循环来保证每个值都删除。

列表排序

排序这一功能很常见,sort方法可以对列表中元素永久性的排序。使用方法:列表.sort()

定义一个cars的列表,里面的元素是一些品牌的汽车,如下

cars = ['bwm','audi','volvo','toyota']

排序:

cars.sort()

sort方法也可以通过传递参数reverse来指定排序的方式,默认是正序也可以不传,如上面示例那样。也可以通过传入reverse=True来进行倒序排列。

cars.sort(reverse=True)

这种通过sort方式对列表元素修改的顺序是永久性的,也就是在不进行其他的操作前,会保持修改的样子

还有一种方式可以保留列表原来的排列方式,又可以以特定的顺序呈现他们,这就是函数sorted(),也就是改变的顺序只是暂时的。

重新定义cars列表,如下:

cars = ['bwm','audi','volvo','toyota']

临时改变顺序

print(sorted)

其实也可以用变量接收,来破坏这种约束性。

sorted函数也支持传入reverse参数的方式,用法与sort相同。

若想将列表中的元素全部反转,可利用reverse()方法。依然是cars列表,进行反转。

这种对元素的修改也是永久性的。想要变回最初的排列方式可以再调用一次reverse()方法。

可以通过len()方法确定列表的长度。用法将列表传入到len()方法内。

索引错误

访问列表不存在元素的索引时将引发错误,比如cars列表中只有四个元素,那么它的索引为0-3,这时如果访问索引4的话将会报错,因为找不到元素,这在其他语言中可能是索引越界。

如下:

Python提供了负数索引的方式从后往前访问元素,比如-1代表最后一个元素,-2代表倒数第二个元素等,这里要访问最后一个元素就是cars[-1]

但是有一种情况这种方式也会报错,就是列表是空的时候。如定义个空列表

arr = []

再通过这种方式访问。

参考

《Python编程:从入门到实践》 埃里克·马瑟斯著

分类:

后端

标签:

Python

作者介绍

矿 仔
V1