一. 列表的基本概念
1.定义:列表是一种可变的、有序的数据结构,可以随时添加和删除其中的元素。
#1 列表可以包含任意类型的对象:数字、字符串、列表、元组或其他对象。
#2 列表是一个有序序列。可通过位置偏移量执行列表的索引和分片操作。
#3 列表是可变的。列表的长度可变,即可添加或删除列表成员。列表元素的值也可以改变。
#4 每个列表元素存储的是对象的引用,而不是对象本身,类似于C/C++的指针数组。
列表基本操作包括:创建列表、求长度、合并、重复、迭代、关系判断、索引和分片等。
二.列表的创建
列表对象可以用列表常量或list()函数来创建,示例代码如下。
在这里插入代码片
# [] (中括号) 代表列表
arr = [] # 创建空列表对象
arr2 = [1, 2, 3] # 用同类型的数据创建列表对象
# 列表是一个数据容器, 我们可以在里面放置数据(比如我们前面学到的<数字/小数/字符串/布尔类型
>)
arr3 = [1, 2, 3, 'a', 'b', 'c', True, 3 > 4, print] # 用不同类型的数据创建列表
对象
print(arr3)
print(type(arr3)) # <class 'list'> list 是列表类型
输出的结果:
在这里插入代码片
[1, 2, 3, 'a', 'b', 'c', True, False, <built-in function print>]
<class 'list'>
三. 列表的方法
1.类型转化
将其他 序列 类型转化为列表
在这里插入代码片
s = 'hello world !'
arr4 = list(s) # 使用 list() 将其他数据类型转换成列表
# 输出: ['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', ' ', '!']
2.索引取值
支持正序取值或者逆序取值,超出索引范围会报错
正序:索引从 0 开始
逆序:索引从 -1 开始
在这里插入代码片
"""列表是有序的数据容器"""
name_list = ['张三', '李四', '王五', '马六']
# 正序取值: 索引从 0 开始
print(name_list[0])
print(name_list[3])
# print(name_list[6]) # 取值超出索引范围会报错: IndexError: list index out of
range
# 逆序取值: 索引从 -1 开始
print(name_list[-1])
print(name_list[-4])
3.切片取值
Python中符合序列的有序序列都支持切片(slice),切片 方法适用于 字符串、列表、元组。
格式:
[起始值:结束值:步长]
start: 起始索引,从0开始,-1表示结束
stop:结束索引
step:步长,end-start,步长为正时,从左向右取值。步长为负时,反向取值
在这里插入代码片
arr = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']
print(arr)
# 0 1 2 左闭右开 顾首不顾尾
print(arr[0:3]) # 指定区间切片
print(arr[:3]) # 从头开始切片. 如果第一个参数(起始值)是0 可以省略
print(arr[1:-1])
print(arr[1:]) # 切片到末尾. 如果想切到最后一个内容, 第二个参数(结束值)需要省略
print(arr[:]) # 省略参数切全部内容
切片的步长
在这里插入代码片
"""切片的步长"""
# 如果有步长, 就会分为两步走
# 先切起始值与结束值,然后再用步长进行计算
# 不指定步长默认为 1
print(arr[1::1], '步长')
print(arr[1::2], '步长')
# 步长可以为负数
print(arr[1::-2], '负数步长')
print(arr[-1:0:-2], '负数步长')
常用的方法
列表大部分的方法都是就地操作(修改原来的内容), 拷贝一份进行操作(不会修改原来的值,但是会返回一个新的内容)
四. 常用的方法
1 index():返回指定数据所在位置的索引 。
在这里插入代码片
列表序列.index(数据)
2 count():统计指定数据在当前列表中出现的次数。
在这里插入代码片
name_list = ['张三', '李四', '王五']
# count 统计某个重复的数据出现的次数
print(name_list.count('张三')) # '张三' 这个元素在列表中出现了1次
3 len():访问列表长度,即列表中数据的个数。
在这里插入代码片
name_list = ['张三', '李四', '王五']
print(len(name_list))
4 **in和not in ** 用来查找名字是否存在于列表之中
在这里插入代码片
name_list = ['张三', '李四', '王五']
print('李四'in name_list)
#这样的结果只会有两种,True和False
5 append():列表结尾追加数据。示例如下
在这里插入代码片
列表序列.append(数据)
注意点: 如果 append() 追加的数据是一个序列,则追加整个序列到列表
6 extend():列表结尾追加数据,如果数据是一个序列,则将这个序列的数据逐一添加到列表。
在这里插入代码片
列表序列.extend(数据)
7 insert():指定位置新增数据。
在这里插入代码片
列表序列.insert(位置下标, 数据)
8 pop():删除指定下标的数据(默认为最后一个),并返回该数据。
在这里插入代码片
列表序列.pop(下标)
9 remove():移除列表中某个数据的第一个匹配项。
在这里插入代码片
列表序列.remove(数据)
10 修改指定下标数据
在这里插入代码片
name_list[0] = '张三'
11 逆置:reverse()
在这里插入代码片
arr.reverse()
12 排序:sort()
在这里插入代码片
列表序列.sort( key=None, reverse=False)
注意:reverse表示排序规则,reverse = True 降序, reverse = False 升序(默认)
13 列表遍历
需求:依次打印列表中的各个数据。
while 方法
在这里插入代码片
name_list = ['张三', '李四', '王五']
>>>
>>> i = 0
>>> while i < len(name_list):
print(name_list[i])
i += 1
for 方法
在这里插入代码片
name_list = ['张三', '李四', '王五']
>>>
>>> for i in name_list:
print(i)
14 列表嵌套
所谓列表嵌套指的就是一个列表里面包含了其他的子列表。
应用场景:要存储班级一、二、三三个班级学生姓名,且每个班级的学生姓名在一个列表。
在这里插入代码片
name_list = [
['小明', '小红', '小绿'],
['Tom', 'Lily', 'Rose'],
['张三', '李四', '王五']
]
print(name_list[2][1])
[0,0]就是'小明'
序列默认从0开始数,所以找到的元素为'李四'
五.列表的总结
列表作为python中的一种重要的数据容器,在日后的工作中会有十分重要的作用,因为它是一种可以变化的序列,所以我们可以对它进行增,删,改,查等操作.当然,它的一些优点也会是它的缺陷,比如说,它的数据的改变,可能会让我们自己有时候会忘记了自己的操作,导致后续工作的错误,下次我们再来聊一聊一种不可变的序列:元组,他也是一种重要的数据容器.