Python标准库中的列表(list数组)操作汇总(大约25种操作),附示例代码
Posted 昊虹图像算法
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python标准库中的列表(list数组)操作汇总(大约25种操作),附示例代码相关的知识,希望对你有一定的参考价值。
Python标准库中的列表(list)类似于C/C++中的数组。
Python扩展库中的ndarray对象有许多操作和列表(list)的操作类似,比如切片操作、元素访问呢,但它们是两个东西,大家不要搞混了。关于ndarray对象的基本操作,可参考博文 https://blog.csdn.net/wenhao_ir/article/details/124416798
数组对于编程而言其重要性是不言而喻的,所以这篇博文汇总一下Python标准库中的列表(list)的操作。
声明:博主(昊虹图像算法)写这篇博文时,用的Python的版本号为3.9.10。
目录
- 01-序列和列表的基本概念
- 02-列表的创建
- 03-列表元素的访问
- 04-列表的切片操作
- 05-1 使用方法append()添加列表元素
- 05-2 使用方法extend()在列表末尾一次性追加另一个序列中的多个值
- 05-3 使用方法insert()在列表的任意位置插入元素
- 06-1-使用del语句删除列表中指定位置的元素
- 06-2-使用方法pop()删除指定位置的元素,并返回元素值
- 06-3-使用方法remove()移除列表内指定内容的元素
- 07-1 使用函数len()测量(返回)列表的长度
- 07-2 使用函数max()返回列表中元素的最大值
- 07-3 使用函数min()返回列表中元素的最大值
- 08-使用运算符"+"实现列表合并
- 09-使用运算符"*"实现列表重复扩展
- 10-使用“in”判断某元素是否在列表里
- 11-列表嵌套(类似于多维数组-列表作为列表的元素)
- 12-使用operator的方法eq()比较两个列表是否相等
- 13-使用方法count()统计某个元素在列表中出现的次数
- 14-使用方法index()查找列表元素
- 15-使用方法reverse()反向列表中的元素
- 16-使用方法sort()对列表进行排序操作
- 17-使用方法clear()清空列表
- 18-1-使用方法copy()或方法copy.append()复制列表【深拷贝操作】
- 18-2-使用“=”实现列表的浅拷贝【浅拷贝操作】
- 19-使用函数tuple()将列表转换为元组
- 20-列表转换为ndarray对象
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-1-使用方法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()也是作的是深拷贝。
18-2-使用“=”实现列表的浅拷贝【浅拷贝操作】
示例代码如下:
list1 = ['Google', 'CSDN', 'tencent', 1997, 1999, 1998]
list2 = list1
list1[0] = 'Facebook'
运行结果如下:
从上面的运行结果可以看出,对list1的修改影响到了list2,说明二者是共用内存空间,说是“=”实现的是浅拷贝。
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
以上是关于Python标准库中的列表(list数组)操作汇总(大约25种操作),附示例代码的主要内容,如果未能解决你的问题,请参考以下文章