python基础回顾——列表进阶篇
前言
上一篇讲述列表的基础,而列表在实际使用中也是较常用的python数据结构,本篇进一步对列表的使用进行回顾学习。
遍历列表
根据前篇列表元素的访问是基于下标索引的使用,而当需要对多个元素进行操作时便需要借助循环语句进行列表遍历操作,通过for in :
以及缩进进行遍历操作执行。需要注意的地方是缩进的使用以及for循环的使用。
>>> L
['1', '2', '3', 4, 5, 6]
>>> for i in L:
... print(i)
...
1
2
3
4
5
6
数值列表
引入range()方法
range()方法可以按照指定的数字区间以及间隔等进行生成一系列数值内容,range(i,j,k)表示以数字i为起始,以数字j-1为终止,间隔为数字k,罗列[i,j)区间的满足要求的数字。>>> range(3,9,2) range(3, 9, 2) >>> for i in range(3,9,2): ... print(i) ... 3 5 7
使用range方法建立数值列表
使用list()方法直接转化可由range方法直接生成数值的内容。
>>> list(range(3,9,2)) [3, 5, 7]
根据range方法生成的数值内容进行计算得到的数值,通过列表添加的方式遍历写入进而生成列表。
>>> L = [] >>> L [] >>> for i in range(1,10,2): ... L.append(i**2) ... >>> L [1, 9, 25, 49, 81]
数值列表统计方法
- 常见的统计方法有max、min和sum,分别求取列表中的最大值、最小值和求和。
>>> L [1, 9, 25, 49, 81] >>> min(L) 1 >>> max(L) 81 >>> sum(L) 165
列表解析
前面介绍的数值列表生成借助循环和列表插入进行生成,而python中存在使用一种表达式方式通过一行代码实现这样的列表生成,此处使用的是列表解析,之后还会提到lambda表达式等同样方式,将初始化、循环和列表操作等都融合在一起。
>>> LIST = [i**2 for i in range(1,10,2)]
>>> LIST
[1, 9, 25, 49, 81]
列表切片
- 在使用列表时如果需要对列表元素进行部分或者分类操作,若是一个一个元素进行遍历操作也显得不够简洁,python列表的部分处理便可以使用切片方法,前述使用range方法时说到区间范围的使用格式,列表的切片也是一样的原理,通过
list[i:j]
的格式获取列表list中索引下标为i
到j-1
的元素。如下所示取出列表中第三个元素至最后一个元素的部分列表内容。
>>> LIST
[1, 9, 25, 49, 81]
>>> LIST[2:]
[25, 49, 81]
- 遍历切片
循环遍历对象由完整列表替换为切片内容即部分列表,省去对多余对象的操作。
>>> for i in LIST[2:]:
... print(i)
...
25
49
81
- 列表复制
当需要在已有列表的基础上建立新的列表,可以通过列表复制的方法简化列表初始化工作,即将已有列表通过切片方式赋值给新列表。
注意 不能通过列表直接赋值的方式,如list2 = list1
这样进行复制列表,因为在底层内存对变量的辨别是通过地址进行的,上述方式无异于将同一地址使用两个变量表示,本质上是同一个列表,并不能实现复制内容而得到第二个新列表的结果。
>>> list1
[1, 9, 25, 49, 81]
>>> list2 = list1[2:4]
>>> list2
[25, 49]
元组
列表非常适合用于存储在程序运行期间可能变化的数据集。列表是可以修改的,而有时候也会需要内容不可修改的列表,即不可变列表,而python中即叫元组。
- 初始化元组
和列表初始化相似,但是使用()
进行表示,通过下标索引进行读取元组元素内容。
>>> tuple = ('temp',1,2,3)
>>> tuple
('temp', 1, 2, 3)
>>> tuple[2]
2
>>> tuple[2:]
(2, 3)
- 元组操作
元组元素内容是不能进行修改的,但是当元素本身是变量时,元素的值是可修改的即可以通过重新初始化的方式将元组内容进行改变,但是既定元组元素内容不可变。
>>> tuple
(0, 2, 3)
>>>
>>> tuple[0]=1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> tuple = (0,1,2)
>>> tuple
(0, 1, 2)
- 可变的元组
元组的元素内容不可变实际是指元组内元素地址不可变,即元素指向的可能是有数值、字符等具体内容的地址也可以是列表等存在可变内容的地址,只要地址块不变,元组便不变。
>>> tuple
(['a', 'b'], 'A', 'B', 1, 2, 3, [11, 22])
>>> tuple[0][1]='c'
>>> tuple
(['a', 'c'], 'A', 'B', 1, 2, 3, [11, 22])
>>> tuple[1]='C'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
借用廖雪峰老师的解释图,廖老师的图例中也是元组由列表和字符组成,并说明元组指向是列表本身,而列表中的元素地址不在元组指向范围。
——————
小结
列表的进一步认识包括遍历操作、切片操作、列表解析以及元组的引入,对这些内容的学习回顾将帮助在之后的项目分享中进行运用,共勉。