Python——序列(上)
032. 列表
序列
- 序列是一种数据存储方式,用来存储一系列的数据。在内存中,序列就是一块用来存放多个值的连续的内存空间。
- 序列中存储的是整数对象的地址,而不是整数对象的值。
- Python中常用的序列结构有:字符串、列表、元组、字典、集合。
列表简介
列表:用于存储任意数目、任意类型的数据集合。
列表是内置可变序列,是包含多个元素的有序连续的内存空间。列表定义的标准语法格式:
其中,10,20,30,40这些称为:列表a的元素。
列表中的元素可以各不相同,可以是任意类型。比如:a = [10, 20, ‘abc’, True]
常用方法
方法 | 要点 | 描述 |
---|---|---|
list.append(x) | 增加元素 | 将元素x增加到列表list尾部 |
list.extend(aList) | 增加元素 | 将列表aList所有元素加到列表list尾部 |
list.insert(index,x) | 增加元素 | 在列表list指定位置index处插入元素x |
list.remove(x) | 删除元素 | 在列表list中删除首次出现的指定元素x |
list.pop([index]) | 删除元素 | 删除并返回列表list指定位置index处的元素,默认是最后一个元素 |
list.clear() | 删除元素 | 删除列表所有元素,并不是删除列表对象 |
list.index(x) | 访问元素 | 返回第一个x的索引位置,若不存在x元素抛出异常 |
list.count(x) | 计数 | 返回指定元素x在列表list中出现的次数 |
len(list) | 列表长度 | 返回列表中包含元素的个数 |
list.reverse(x) | 翻转列表 | 所有元素原地翻转 |
list.sort() | 排序 | 所有元素原地排序 |
list.copy() | 浅拷贝 | 返回列表对象的浅拷贝 |
- Python的列表大小可变,根据需要随时增加或缩小。
- 字符串和列表都是序列类型,一个字符串是一个字符序列,一个列表是任何元素的序列。很多字符串的方法在列表中也有类似的用法,几乎一模一样。
033. 列表的创建
基本语法[]创建
a = [10, 20, ‘huhu’, ‘Python’]
list()创建
使用 list() 可以将任何可迭代的数据转换成列表。
range()创建整数列表
range()可以帮助我们非常方便地创建整数列表,这在开发中极其有用。语句如下:
- start 参数:可选,表示起始数字,默认是0。
- end 参数:必选,表示结尾数字。
- step 参数:可选,表示步长,默认是1。
推导式生成列表
使用列表推导式可以非常方便地创建列表,在开发中经常使用。涉及for循环和if语句。
034. 列表元素的增加
当列表增加和删除元素时,列表会自动进行内存管理,大大减少了程序员的负担。但这个特点涉及列表元素的大量移动,效率较低。除非必要,我们一般只在列表的尾部添加元素或删除元素,这会大大提高列表的操作效率。
append()方法
原地修改列表对象,是真正的列表尾部添加新的元素,速度最快,推荐使用。
+运算符操作
并不是真正的尾部添加元素,而是创建新的列表对象;将原列表的元素和新列表的元素依次复制到新的列表对象中。这样,会涉及大量的复制操作,对于操作大量元素不建议使用。
extend()方法
将目标列表的所有元素添加到本列表的尾部,属于原地操作,不创建列表对象。
insert()插入元素
使用 insert()方法 可以将指定元素插入到列表对象的任意 指定位置 。这样会让位置后面所有的元素进行移动,会影响处理速度。涉及大量元素时,尽量避免使用。类似发生这种移动的函数还有:remove()、pop()、del(),它们在删除非尾部元素时也会发生操作位置后面元素的移动。
乘法扩展
使用乘法扩展列表,生成一个新列表,新列表元素是原列表元素的多次重复。
适用于乘法操作的还有:字符串、元组。
035. 列表元素的删除
del删除
删除列表 指定位置 的元素。实际是将指定位置的后一个元素依次向前挪动。
pop()方法
pop() 删除并返回指定位置元素,如果未指定位置则默认操作列表的最后一个元素。
remove()方法
删除 首次出现 的指定元素,若不存在该元素抛出异常。
036. 列表元素的访问和计数
通过索引直接访问元素
我们可以通过索引直接访问元素。索引的区间在 [0,列表长度-1] 这个范围。超过这个范围则会抛出异常。
index()获得指定元素在列表中首次出现的索引
index() 可以获取指定元素首次出现的索引位置。语法是:index(value, [start, [end]])。其中,start和end指定了搜索的范围。
count()获得指定元素在列表中出现的次数
count() 可以返回指定元素在列表中出现的次数。
len()返回列表长度
len() 返回列表长度,即列表中包含元素的个数。
成员资格判断
判断列表中是否存在指定的元素,我们可以使用 count()方法 ,返回 0 则表示不存在,返回 大于0 则表示存在。但是,一般我们会使用更加简洁的 in关键字 来判断,直接返回 True 或 False 。
037. 列表的切片操作
切片是Python序列极其重要的操作,适用于列表、元组、字符串等等。
切片slite操作可以让我们快速提取子列表或修改。标准格式为:
典型操作(三个量为正数的情况) 如下:
操作和说明 | 示例 | 结果 |
---|---|---|
[:] 提取整个列表 | [10,20,30][:] | [10,20,30] |
[start:] 从start索引开始到结尾 | [10,20,30][1:] | [20,30] |
[:end] 从头开始直到end-1 | [10,20,30][:2] | [10,20] |
[start: end] 从start到end-1 | [10,20,30,40][1:3] | [20,30] |
[start: end: step] 从start提取到end-1,步长是step | [10,20,30,40,50,60,70][1:6:2] | [20,40,60] |
其他操作(三个量为负数的情况) 如下:
示例 | 说明 | 结果 |
---|---|---|
[10,20,30,40,50][-3:] | 倒数三个 | [30,40,50] |
[10,20,30,40,50][-4:-2] | 倒数第四个到倒数第二个(包头不包尾) | [20,30] |
[10,20,30,40,50][::-1] | 步长为负,从右到左反向提取 | [50,40,30,20,10] |
切片操作时,起始偏移量和终止偏移量不在 [0,字符串长度-1] 这个范围,也不会报错。起始偏移量小于0则会当做0,终止偏移量大于“长度-1”会被当做“长度-1”。
列表的遍历
for obj in listObj:
print(obj)
038. 列表的排序
修改原列表,不创建新列表的排序
- a.sort() 为升序排序
- a.sort(reverse=True) 为降序排序
- random.shuffle(a) 为随机排序
建新列表的排序
我们可以通过内置函数 sorted() 进行排序,这个方法返回新列表,不对原列表做修改。
reversed()返回迭代器
内置函数reversed()也支持进行逆序排列,与列表对象reverse()方法不同的是,内置函数 reversed() 不对原列表做任何修改,只是返回一个逆序排列的迭代器对象。
列表相关的其他内置函数汇总
max和min
用于返回列表中的最大值和最小值。
sum
对数值型列表的所有元素进行求和操作,对非数值类列表运算则会报错。
039. 二维列表
- 一维列表 可以帮助我们存储一维、线性的数据。
- 二维列表 可以帮助我们存储二位、表格的数据。
a=[
["张三","18","男","计算机专业"],
["李四","20","女","通信专业"],
["王五","19","男","网络专业"],
]
# 嵌套循环打印二维列表的所有数据
for m in range(3): # m为行数
for n in range(4): # n为列数
print(a[m][n],end = "\t") # 以制表符\t结束
print() # 打印完一行,换行
运行结果: