Python标准库中的列表(list、数组)操作汇总(大约25种操作),附示例代码

Python标准库中的列表(list)类似于C/C++中的数组。

Python扩展库中的ndarray对象有许多操作和列表(list)的操作类似,比如切片操作、元素访问呢,但它们是两个东西,大家不要搞混了。关于ndarray对象的基本操作,可参考博文 https://blog.csdn.net/wenhao_ir/article/details/124416798

数组对于编程而言其重要性是不言而喻的,所以这篇博文汇总一下Python标准库中的列表(list)的操作。

01-序列和列表的基本概念

序列是 Python 中最基本的数据结构。
序列中的每个值都有对应的位置值,称之为索引,第一个索引是 0,第二个索引是 1,依此类推。
序列都可以进行的操作包括索引,切片,加,乘,检查成员。
此外,Python 已经内置确定序列的长度以及确定最大和最小的元素的方法。

Python 有 6 个序列的内置类型,但最常见的是列表和元组。
列表是最常用的 Python 数据类型,列表的数据项不需要具有相同的类型。

02-列表的创建

02-1-直接用中括号[]创建

创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可。

list1 = ['Google', 'CSDN', 1997, 1999]
list2 = [1, 2, 3, 4, 5]
list3 = ['red', 'green', 'blue', 'yellow', 'white', 'black']

运行结果如下图所示:
在这里插入图片描述
从上面的结果中我们可以看出,在Python中是用单词list表示列表的。

02-2-用构造函数创建

列表本质上还是对象,所以可以用构造函数创建,代码如下:

list1 = list()

list1.append('Google')
list1.append('CSDN')
list1.append('1997')
list1.append('1999')

运行结果如下:
在这里插入图片描述
从上面来看,显然第1种方法比第2种方法方便。但是当您要使用成员函数append()追加元素时,如果用第一种方法,Pycharm会不建议这么操作,如下图所示:
在这里插入图片描述

This list creation could be rewritten as a list literal。

这句话的意思是列表应该按本义创建。什么叫本义创建?列表本质上是个对象,既然对象,那就用构造函数初始化创建呗。
下面的两篇文章都说了这个问题的原因:
https://www.cnblogs.com/jiangxiaobo/p/11622730.html
https://zhuanlan.zhihu.com/p/222401764

03-列表元素的访问

示例代码如下:

list1 = ['Google', 'CSDN', 1997, 1999]

print(list1[0])
print(list1[1])
print(list1[2])

运行结果如下:
在这里插入图片描述
除了从左往右,也可从右往左,示例代码如下:

list1 = ['Google', 'CSDN', 1997, 1999]

print(list1[-1])
print(list1[-2])
print(list1[-3])

运行结果如下:
在这里插入图片描述

04-列表的切片操作

示例代码如下:

list1 = ['Google', 'CSDN', 'tencent', 1997, 1999, 1998]
list2 = list1[0:4]

注意:切片的区间是左闭右开的,即[0:4]相当于[0,4)
运行结果如下:
在这里插入图片描述
还可以正索引和负索引相结合:

list1 = ['Google', 'CSDN', 'tencent', 1997, 1999, 1998]
list2 = list1[0:-2]

上面的list1[0:-2]表示截取0到倒数第2个的片段,运行结果如下:
在这里插入图片描述

05-1 使用方法append()添加列表元素

首先说一下,使用方法append()添加列表元素时有可能Pycharm会有下面的建议提示:
在这里插入图片描述

This list creation could be rewritten as a list literal。

要消除上面的提示,可以参考我的另一篇博文,链接如下:
https://blog.csdn.net/wenhao_ir/article/details/125414855

使用方法append()添加列表元素的示例代码如下:

list1 = list()

list1.append('Google')
list1.append('CSDN')
list1.append('1997')
list1.append('1999')

运行结果如下:
在这里插入图片描述
要特别注意的是:当使用方法append()添加的元素本身也是一个列表时,此时是浅拷贝操作,也就是说被拷贝的列表值改变,那么列表中相应元素的值也会变,示例代码如下:

list1 = list()

list1.append('Google')
list1.append('CSDN')
list1.append('1997')
list1.append('1999')

list2 = [2010]
list1.append(list2)
list2[0] = 4444

运行结果如下:
在这里插入图片描述
如果是深拷贝,那么list1中的第4个元素值应该是[2010]才对。

如果想实现列表的深拷贝,可以像下面这样操作:

import copy

list1 = list()

list1.append('Google')
list1.append('CSDN')
list1.append('1997')
list1.append('1999')

list2 = [2010]
list1.append(copy.deepcopy(list2))
list2[0] = 4444

运行结果如下:
在这里插入图片描述
当然也可以用方法copy()实现,即代码:

list1.append(copy.deepcopy(list2))

可以换成

list1.append(list2.copy())

对于一般的变量,效果就是深拷贝,代码如下:

list1 = list()

list1.append('Google')
list1.append('CSDN')
list1.append('1997')
list1.append('1999')

value1 = 2030
list1.append(value1)
value1 = 4444

运行结果如下:
在这里插入图片描述

05-2 使用方法extend()在列表末尾一次性追加另一个序列中的多个值

从上面的示例我们可以看出,方法append()是把被追加的列表作一个整体(即作为一个元素)添加到原列表中的,有时候我们希望在列表末尾一次性追加另一个序列中的多个值,这个时候就可以用方法extend()实现。
示例代码如下:

list1 = ['Google', 'CSDN', 'Taobao']
list2 = [1997, 1999, 1998]
list1.extend(list2)

运行结果如下:
在这里插入图片描述

05-3 使用方法insert()在列表的任意位置插入元素

示例代码如下:

list1 = ['Google', 'CSDN', 'Taobao', 1997, 1999, 1998, 1999]
list1.insert(3, 'Tecent')

运行结果如下:
在这里插入图片描述

06-1-使用del语句删除列表中指定位置的元素

示例代码如下:

list1 = ['Google', 'CSDN', 'tencent', 1997, 1999, 1998]
del list1[2]

运行结果如下:
在这里插入图片描述
从上面的结果来看,第2个元素’tencent’被删除了。

06-2-使用方法pop()删除指定位置的元素,并返回元素值

方法pop()语法如下:

list.pop([index=-1])

index – 可选参数,要移除列表元素的索引值,不能超过列表总长度,默认为 index=-1,删除最后一个列表值。
示例代码如下:

list1 = ['Google', 'CSDN', 'tencent', 1997, 1999, 1998]
list2 = ['Google', 'CSDN', 'tencent', 1997, 1999, 1998]

value1 = list1.pop()
value2 = list1.pop(1)

运行结果如下:
在这里插入图片描述

06-3-使用方法remove()移除列表内指定内容的元素

示例代码如下:

list1 = ['Google', 'CSDN', 'tencent', 1997, 1999, 1998, 'CSDN']
list1.remove('CSDN')

运行结果如下:
在这里插入图片描述
从上面的运行结果可知,方法remove()移除的是第一个匹配到的元素。上面的字符串元素’CSDN’有两个,但只被删了第一个。

07-1 使用函数len()测量(返回)列表的长度

示例代码如下:

len1 = len([1, 2, 3])

list1 = ['Google', 'CSDN', 'tencent', 1997, 1999, 1998]
len2 = len(list1)

运行结果如下:
在这里插入图片描述

07-2 使用函数max()返回列表中元素的最大值

示例代码如下:

list1 = [456, 700, 200]
max1 = max(list1)

运行结果如下:
在这里插入图片描述

07-3 使用函数min()返回列表中元素的最大值

示例代码如下:

list1 = [456, 700, 200]
min1 = min(list1)

运行结果如下:
在这里插入图片描述

08-使用运算符"+"实现列表合并

示例代码如下:

list1 = ['Google', 'CSDN', 'tencent', 1997, 1999, 1998]
list2 = [4, 5, 6]
list3 = list1+list2

运行结果如下:
在这里插入图片描述

09-使用运算符"*"实现列表重复扩展

示例代码如下:

list1 = ['Google', 'CSDN', 'tencent', 1997, 1999, 1998]
list2 = [4, 5, 6]
list3 = list1*2
list4 = list2*3

运行结果如下:
在这里插入图片描述

10-使用“in”判断某元素是否在列表里

示例代码如下:

list1 = ['Google', 'CSDN', 'tencent', 1997, 1999, 1998]

bool1 = 'CSDN' in list1
bool2 = 'zhihu' in list1

运行结果如下:
在这里插入图片描述

11-列表嵌套(类似于多维数组-列表作为列表的元素)

列表嵌套,本质上指列表也可以作为列表的元素。

示例代码如下:

list1 = [['Google', 'CSDN', 'tencent'], [1997, 1999, 1998]]

a1 = list1[0][1]
b1 = list1[1][2]

运行结果如下:
在这里插入图片描述
注意,对于语句:

a1 = list1[0][1]
b1 = list1[1][2]

不能像ndarray对象那样写成下面这样:

a1 = list1[0, 1]
b1 = list1[1, 2]

此时会报错:
在这里插入图片描述
ndarray的多维矩阵元素访问详情见下面这篇博文:
https://blog.csdn.net/wenhao_ir/article/details/124419922

12-使用operator的方法eq()比较两个列表是否相等

示例代码如下:

import operator

a = [1, 2]
b = [2, 3]
c = [2, 3]

bool1 = operator.eq(a, b)
bool2 = operator.eq(c, b)

运行结果如下:
在这里插入图片描述

13-使用方法count()统计某个元素在列表中出现的次数

示例代码如下:

list1 = [123, 'Google', 'CSDN', 'Taobao', 123]
count1 = list1.count(123)
count2 = list1.count('CSDN')

运行结果如下:
在这里插入图片描述

14-使用方法index()查找列表元素

方法index()语法如下:

list.index(x[, start[, end]])

x-- 查找的对象。
start-- 可选,查找的起始位置。
end-- 可选,查找的结束位置。
示例代码如下:

list1 = ['Google', 'CSDN', 'Taobao', 1997, 1999, 1998, 1999]
index1 = list1.index('CSDN')
index2 = list1.index(1999)

运行结果如下:
在这里插入图片描述
列表中1999有两个,可见其返回的是第一个的索引。

15-使用方法reverse()反向列表中的元素

示例代码如下:

list1 = [1, 2, 3, 4, 5, 6, 7]
list1.reverse()

运行结果如下:
在这里插入图片描述

16-使用方法sort()对列表进行排序操作

方法sort()的语法如下:

list.sort( key=None, reverse=False)

key – 用来进行比较的数值,可选参数。
reverse – 排序规则,reverse = True 降序, reverse = False 升序(默认)。
示例代码如下:

list1 = [1, 5, 3, 9, 7, 4, 2, 8, 6]
list1.sort()

list2 = [1, 5, 3, 9, 7, 4, 2, 8, 6]
list2.sort(reverse=True)

运行结果如下:
在这里插入图片描述
关于方法sort()的第一个参数key的用法,就说来话长了,具体情况大家可以参见我的另一篇博文:
https://blog.csdn.net/wenhao_ir/article/details/125406092

17-使用方法clear()清空列表

示例代码如下:

list1 = ['Google', 'CSDN', 'Taobao', 1997, 1999, 1998, 1999]
list1.clear()

运行结果如下:
在这里插入图片描述

18-使用方法copy()或方法copy.append()复制列表【深拷贝操作】

方法copy()的使用示例如下:

list1 = ['Google', 'CSDN', 'Taobao', 1997, 1999, 1998, 1999]
list2 = list1.copy()
list1[0] = 'Facebook'

运行结果如下:
在这里插入图片描述
从上面的代码和运行结果我们可以看出,方法copy()作的是深拷贝。

方法copy.append()的使用示例如下:

import copy

list1 = ['Google', 'CSDN', 'Taobao', 1997, 1999, 1998, 1999]
list2 = copy.deepcopy(list1)
list1[0] = 'Facebook'

运行结果如下:
在这里插入图片描述
从上面的代码和运行结果我们可以看出,方法copy.append()也是作的是深拷贝。

19-使用函数tuple()将列表转换为元组

示例代码如下:

list1 = ['Google', 'Taobao', 'CSDN', 'Baidu']
tuple1 = tuple(list1)

运行结果如下:
在这里插入图片描述
关于元组的详细操作,大家可以参看我的另一篇博文,链接如下:
https://blog.csdn.net/wenhao_ir/article/details/125407815

20-列表转换为ndarray对象

关于列表如何转换为ndarray对象,请大家参考我的另一篇博文,链接如下:
https://blog.csdn.net/wenhao_ir/article/details/125413801

参考资料:
https://blog.csdn.net/wenhao_ir/article/details/125100220

猜你喜欢

转载自blog.csdn.net/wenhao_ir/article/details/125400072
今日推荐