当前位置 博文首页 > jcLee95的博客:Python容器专题 - 列表(list)
导读:原文
Python容器
内容较长不便于阅读和查询,因而被分割称为了多个模块,本文只其中之一。在本文中,详细讲述了Python语言中的列表(list)及其用法。
博主:李俊才
CSDN:jcLee95
邮箱:291148484@163.com
专题总地址:https://blog.csdn.net/qq_28550263/article/details/111618410
【eg1-1】创建列表的常见方式汇总
a = [] # 创建空列表
b = [1,2,3,4,5,'6',{7}] # 创建拥有不同数据类型成员的列表
c = list((0,1)) # 通过强制类型转换创建列表
d = ['零','一','二','三','四','五','六'][1:5] # 通过列表的切片创建子列表
e = [i for i in range(1,16,2)] # 使用嵌套的表达式建立列表,用到了列表推导式的写法
f = list(map(lambda x: x, range(1,16,2))) # 效果上与e相同
g = [[1,2,3,4,5],[5,4,3,2,1]] # 创建二维列表
print('\na=',a,'\nb=',b,'\nc=',c,'\nd=',d,'\ne=',e,'\nf=',f,'\ng=',g)
Out[]:
a= []
b= [1, 2, 3, 4, 5, '6', {7}]
c= [0, 1]
d= ['一', '二', '三', '四']
e= [1, 3, 5, 7, 9, 11, 13, 15]
f= [1, 3, 5, 7, 9, 11, 13, 15]
g= [[1, 2, 3, 4, 5], [5, 4, 3, 2, 1]]
另外,在创建列表时我们还可以用“list * num
”的表达式简写重复的元素,例如:
【eg1-2】“list * num
”的使用
[1,2] * 2
Out[2]:
[1, 2, 1, 2]
从结果中我们可以看到,“* 2”这一操作既没有升级为二维列表,也不是得到两个列表,更不是将原列表中所有的元素都X2,而仅仅是把原来列表中的元素原封不动且不改变顺序地插入了一遍。类似地,我们也可以在创建多维列表时使用该方法,如:
【eg1-3】通过“list * num
”创建多维数组
[[1,2] * 2] * 3
Out[3]:
[[1, 2, 1, 2], [1, 2, 1, 2], [1, 2, 1, 2]]
这样创建地多列表组看起来好像和普通方法列表一样,特别是使用print()函数输出时,它似乎就是普通列表。但是在对其赋值时却会有让人预料外地结果:
【eg1-4】
a = [[1] * 2] * 3
a[0][1] = 3
a
Out[4]:
[[1, 3], [1, 3], [1, 3]]
这与我们所期待的结果[[1, 3], [1, 2], [1, 2]]似乎有那么些不同——由*3创建的所有子数组全部被赋值了而不仅仅是第一个子数组[1,2]赋值成[1,3]。很好!这就是这里要提示的一个知识点。
发生上述现象的原因在于使用 *
对列表执行重复操作并不是创建副本,它只是创建现有对象的引用! *3 创建了对长度为二的同一列表的 3 个引用。 正是如此,对某一行的改变会作用于所有行。
基于以上的特性,在创建有相同子列表的列表时,先创建一个所需长度的列表,其相同子列表作为元素的部分使用*
将显得容易,比如:
【eg1-5】
a = [1,2] * 2 # [1,2, 1,2]
for i in range(2):
a[i] = [1,3] * 2
a
Out[5]:
[[1, 3, 1, 3], [1, 3, 1, 3], 1, 2]
【eg1-6】通过使用“[i]”实现列表的索引:
a = [1, 2, 3, 4]
a[-1]
Out[5]:
4
【eg1-7】通过使用“:”运算符实现列表的切片:
a = [1, 2, 3, 4]
a[0:1]
Out[6]:
[1]
【eg1-8】通过使用“+”运算符实现两个列表的合并:
a = [1, 2, 3, 4]
b = [5, 6, 7, 8]
a+b
Out[7]:
[1, 2, 3, 4, 5, 6, 7, 8]
也可以通过list.extend()
方法实现两个列表的合并,详见下一节。
a = ["老虎","狮子","豹子","袍子","猴子","猩猩","狗熊"]
"北极熊" in a # 判断某元素是否在列表a中,结果为 False
“"猴子" in a # 结果为 True
"袍子" not in a # 结果为 False
# 列表元素的统计
a = [i for i in 'ABCDEFGHIJKABCDEFGHIJK']
a.count('A') # 其结果为 2,表明该元素在列表中出现过2次
# 反转
a = [1, 2, 3, 4, 5, 6, 7]
a.reverse() # 反转列表元素,[7, 6, 5, 4, 3, 2, 1]
# 排序
a = [ 'zl赵六', 'lh李华', 'lm李明', 'xh小红','zs张三', 'lh李华', 'ww王五', 'zl赵六', 'xh小红', 'lh李华']
print(a.sort()) # 对列表中的元素进行排序
# 结果为 [‘lh李华’, ‘lh李华’, ‘lh李华’, ‘lm李明’, ‘ww王五’, ‘xh小红’, ‘xh小红’, ‘zl赵六’, ‘zl赵六’, ‘zs张三’]
b = [9,7,8,5,2,4,5,4,5]
b.sort()
print(b) # 结果为 [2, 4, 4, 5, 5, 5, 7, 8, 9]
注意:列表的
sort()
方法本身并不返回值,它会改变原列表元素的顺序。如果仅想返回一个排序后的列表,可以使用sorted()
语句,该语句不会改变原列而返回一个新的排序后的列表,如:a = [9,7,8,5,2,4,5,4,5] print("a=",a) sorted(a)
1.8 拷贝列表
在Python语言中,拷贝可以分为深拷贝与浅拷贝,列表(list)自带浅拷贝方法
.copy()
# 获取列表的一个浅拷贝 a = [0, 1, 2, 3, 4, 3, 2, 1] a.copy()
除此之外,你也可以使用Python的标准库
copy
来实现拷贝,如:import copy a = ["你","好"] copy.copy(a) # 返回对象a的浅拷贝 copy.deepcopy(a) # 返回对象a的深拷贝
2 列表推导式
2.1 列表推导式的概念
列表推导式,又称列表生成式。用来创建(生成)列表的表达式就是列表推导式,它也称为列表生成式。
本质上列表推导式就是一个简写的for语句。列表推导式中最先出现的与快是后面for语句中遍历时的迭代量的函数,描述了最终返回的列表的每一个元素。每个列表推导式都在for语句后跟一个表达式,然后有若干个for或者if子句。返回结果是一个根据该简写的for语句块生成的列表。2.2 通过列表推导式将方法应用于一系列对象
以
obj
表示某个对象,method()
是该对象的一个方法,其使用方法如:result = [obj.method() for obj in mylist]
3. 列表的常用方法
3.1 列表元素的增删改以及索引
– 增 –
list.append(x) - 在列表的末尾添加一个元素。
- 相当于 a[len(a):] = [x] 。
【eg1-9】使用列表的append()方法在末尾插入新元素
a = [] for i in range(19): a.append(i) a
Out[8]:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18]
list.insert(i, x) - 在指定的位置插入一个元素。
- 第一个参数是要插入的元素的索引,所以 a.insert(0, x) 插入列表头部, a.insert(len(a), x) 等同于 a.append(x) 。
【eg1-10】在某列表a的原第3号位置插入一个新元素
a = [0, 1, 2, 3, 4] a.insert(3, '我是新来的') a
Out[9]:
[0, 1, 2, '我是新来的', 3, 4]
【注意】:使用insert()方法进行插入时,以第一个参数为原先列表的索引值i一定是从0开始计算的。插入元素后,后面的元素先依次往后挪动出一个位置,直至原来在该位置的元素向后挪动出一个空位。最后才把新的元素放在这个唯一的空位上。
– 删 –
list.pop([i]) - 删除列表中给定位置的元素并返回它。
- 如果没有给定位置,a.pop() 将会删除并返回列表中的最后一个元素。
- 【注意】:方法签名中 i 两边的方括号表示这个参数是可选的,而不是需要你再调用的时候输入方括号,本文之后的类容中出现的所有可选区参数在表示上都将遵循该规则。
【eg1-11】
a = [0, 1, 2, 3, 4] a.pop() # pop()函数的返回值是出栈或被删除的元素
Out[10]:
4
a
Out[11]:
[0, 1, 2, 3]
【eg1-12】
a = [0, 1, 2, 3, 4] a.pop(2) a
Out[12]:
[0, 1, 3, 4]
list.remove(x) - 移除列表中第一个值为 x 的元素。
- 如果没有这样的元素,则抛出 ValueError 异常。
【eg1-13】
a = [0, 1, 2, 3, 4, 3, 2, 1] a.remove(3) a
Out[13]:
[0, 1, 2, 4, 3, 2, 1]
list.clear() - 删除列表中所有的元素。
- 相当于 del a[:] 。
【eg1-14】
a = [0, 1, 2, 3, 4, 3, 2, 1] a.clear() a
Out[14]:
[13]
– 改 –
list.extend(iterable) - 使用可迭代对象中的所有元素来扩展列表。
下一篇:没有了
最新 更多<<
jcLee95的博客:Python容器专题 - 列表(list) jcLee95的博客:Python容器专题 - deque(队列)--双向队列对象 jcLee95的博客:Python容器专题 - 元组(tuple) jcLee95的博客:TypeScript算法专题 - [双链表1] - 双链的概念及 jcLee95的博客:TypeScript算法专题 - blog9 - 单链表统计 : 返 jcLee95的博客:纯CSS实现典型网页数据分页器 jcLee95的博客:使用CSS实现网格+渐变背景色的Web页面背景 jcLee95的博客:Vue3 + Typescript + Node.js 搭建elementUI使用 jcLee95的博客:vue组件制作专题 - (mpvue专用)在mpvue中纯自 jcLee95的博客:Javascript中的对象拷贝(对象复制/克隆) jcLee95的博客:JavaScript中的类型、面向对象编程 深度解析 jcLee95的博客:[小笔记]TypeScript/JavaScript映射两组数据 jcLee95的博客:[小笔记]TypeScript/JavaScript数组转置 jcLee95的博客:[小笔记]TypeScript/JavaScript模拟Python中的Ra jcLee95的博客:CSS盒子漂亮起来(1) flutter笔记_jcLee95的博客:flutter学习——使用webview jcLee95的博客:node + ts读取csv文件为二维数组 jcLee95的博客:Nodejs 文件 与 路径 相关用法实例解析 jcLee95的博客:MongoDB Shell工具:mongosh的使用 jcLee95的博客:MongoDB - 使用索引 jcLee95的博客:MongoDB - 数据模型 jcLee95的博客:MongoDB - 使用Python操作MongoDB 英雄哪里出来:??13万字《C语言动漫对话教程(入门篇)》??(建议收 xpj8888的博客:非常清晰地对python模块Numpy进行介绍:矩阵运算 xpj8888的博客:【人工智能行业大师访谈】1. 吴恩达采访 Yoshua xpj8888的博客:【人工智能行业大师访谈】2. 吴恩达采访 林元庆 xpj8888的博客:第一周 机器学习(ML)策略(1):1.1 为什么是 大番薯:编程术语英汉对照 HashFlag的博客:Python基础 风信子的猫Redamancy的快乐星球:PRML - Chapter 02 Probability