Python 列表:定义、操作、推导式与嵌套
一、列表基础
1. 定义与格式
- 基本格式:
列表名 = [元素1, 元素2, 元素3, ...]
所有元素放在方括号[]
内,元素之间用英文逗号,
分隔。 - 特点:
- 元素类型可混合(整数、字符串、布尔值等均可共存);
- 有序(元素位置固定,可通过下标访问);
- 可修改(支持添加、删除、修改元素)。
2. 基础示例
# 定义一个混合类型的列表
li = [1, 2, 'a', True, 3.14]
# 打印列表及类型(list)
print(li, type(li)) # 输出:[1, 2, 'a', True, 3.14] <class 'list'>
二、列表核心操作
1. 元素访问:切片与遍历
列表是可迭代对象,支持通过「下标切片」和「for 循环遍历」获取元素。
(1)切片(获取指定范围元素)
- 格式:
列表名[起始下标:结束下标:步长]
(左闭右开,步长默认 1,可省略); - 下标规则:正向从
0
开始,反向从-1
开始(-1
代表最后一个元素)。
li = [1, 2, 'a', 4]
# 切片:获取下标 0~2 的元素(不包含下标3)
print(li[0:3]) # 输出:[1, 2, 'a']
# 切片:获取所有元素(省略起始和结束下标)
print(li[:]) # 输出:[1, 2, 'a', 4]
# 切片:反向获取最后2个元素
print(li[-2:]) # 输出:['a', 4]
(2)for 循环遍历
逐一获取列表中的每个元素,适用于批量处理元素。
li = [1, 2, 'a', 4]
for i in li: # i 依次代表列表中的每个元素print(i) # 输出:1、2、a、4(每行一个)
2. 添加元素(3 种方法)
列表支持动态添加元素,常用 append()
、extend()
、insert()
三种方法,区别如下:
方法 | 功能描述 | 示例代码 | 执行结果 |
---|---|---|---|
append(元素) | 整体添加:将元素作为一个整体追加到列表末尾(支持任意类型元素) | li = ['one','two']; li.append('three') | ['one', 'two', 'three'] |
extend(可迭代对象) | 分散添加:将可迭代对象(如字符串、列表)的元素逐一追加到列表末尾 | li = ['one','two']; li.extend('three') | ['one', 'two', 't', 'h', 'r', 'e', 'e'] |
insert(下标, 元素) | 指定位置添加:在指定下标处插入元素,原有元素自动后移(下标超范围则追加到末尾) | li = ['one','two']; li.insert(0, 'zero') | ['zero', 'one', 'two'] |
示例演示:
li = ['one', 'two', 'three']
# 1. append():整体添加
li.append('four')
print(li) # 输出:['one', 'two', 'three', 'four']# 2. extend():分散添加(字符串拆分为单个字符)
li.extend('four')
print(li) # 输出:['one', 'two', 'three', 'four', 'f', 'o', 'u', 'r']# 3. insert():指定下标0插入
li.insert(0, 'four')
print(li) # 输出:['four', 'one', 'two', 'three', 'four', 'f', 'o', 'u', 'r']
3. 修改元素
通过「下标定位」直接赋值修改,语法:列表名[下标] = 新值
。
li = [1, 2, 3]
# 将下标1的元素(值为2)修改为0
li[1] = 0
print(li) # 输出:[1, 0, 3]
4. 查找元素(4 种方式)
用于判断元素是否存在、获取元素位置或统计出现次数。
(1)in
/ not in
:判断元素是否存在
元素 in 列表
:存在返回True
,否则False
;元素 not in 列表
:不存在返回True
,否则False
。
实用场景:用户昵称去重(避免重复注册)
# 已存在的昵称列表
name_list = ["adwd", "dwdfw", "zsfafa"]
while True:name = input("请输入你的昵称:")if name in name_list:print(f"{name}已经存在,请重新输入!")else:print(f"{name}可用,已注册!")name_list.append(name) # 将新昵称加入列表break
(2)index(元素)
:获取元素下标
- 返回指定元素在列表中第一次出现的下标;
- 若元素不存在,直接报错(
ValueError
)。
li = [1, 2, 3, 2]
print(li.index(2)) # 输出:1(第一个2的下标)
(3)count(元素)
:统计元素出现次数
返回指定元素在列表中出现的总次数,若元素不存在则返回 0
。
li = [1, 2, 3, 2]
print(li.count(2)) # 输出:2(2出现了2次)
print(li.count(4)) # 输出:0(4不存在)
5. 删除元素(4 种方法)
根据「下标」或「元素值」删除,不同方法适用场景不同:
方法 | 功能描述 | 示例代码 | 执行结果 |
---|---|---|---|
del 列表名[下标] | 根据下标删除元素,也可直接删除整个列表(del 列表名 ) | li = [1,2,3,4]; del li[2] | [1, 2, 4] |
pop(下标) | 删除指定下标的元素,默认删除最后一个元素,且返回被删除的元素 | li = [1,2,3,4]; li.pop() | [1, 2, 3] (返回 4) |
remove(元素) | 根据元素值删除,默认删除第一次出现的该元素,元素不存在则报错 | li = [1,2,3,4,2]; li.remove(2) | [1, 3, 4, 2] |
示例演示:
# 1. del:根据下标删除
li1 = [1, 2, 3, 4]
del li1[2] # 删除下标2的元素(3)
print(li1) # 输出:[1, 2, 4]# 2. pop():默认删最后一个,或指定下标
li2 = [1, 2, 3, 4]
li2.pop() # 默认删最后一个(4)
print(li2) # 输出:[1, 2, 3]
li2.pop(1) # 删除下标1的元素(2)
print(li2) # 输出:[1, 3]# 3. remove():按值删除(删第一个2)
li3 = [1, 2, 3, 4, 2]
li3.remove(2)
print(li3) # 输出:[1, 3, 4, 2]
6. 排序(sort()
与 reverse()
)
用于对列表元素进行顺序调整,仅支持元素类型一致的列表(如全是数字或全是字符串)。
方法 | 功能描述 | 示例代码 | 执行结果 |
---|---|---|---|
sort() | 正序排序:默认从小到大(数字)、按字母顺序(字符串),直接修改原列表 | li = [1,4,3,7,2]; li.sort() | [1, 2, 3, 4, 7] |
reverse() | 倒序排列:将列表元素反转(不排序,仅颠倒顺序),直接修改原列表 | li = [1,2,3,4]; li.reverse() | [4, 3, 2, 1] |
示例演示:
li = [1, 4, 3, 7, 2]
# 正序排序
li.sort()
print(li) # 输出:[1, 2, 3, 4, 7]# 倒序排列(基于当前排序结果反转)
li.reverse()
print(li) # 输出:[7, 4, 3, 2, 1]
三、高级用法
1. 列表推导式(简化列表创建)
通过简洁的语法快速生成列表,替代传统的 for 循环 + append()
,分为「基础格式」和「带条件格式」。
(1)基础格式:[表达式 for 变量 in 可迭代对象]
- 可迭代对象:列表、
range()
、字符串等; - 逻辑:变量遍历可迭代对象,将「表达式」结果作为新列表的元素。
示例 1:批量生成元素(替代 for + append
)
# 传统方式:生成 0~4 的列表
li1 = []
for i in range(5):li1.append(i)
print(li1) # 输出:[0, 1, 2, 3, 4]# 列表推导式:一行实现
li2 = [i for i in range(5)]
print(li2) # 输出:[0, 1, 2, 3, 4]
示例 2:对元素进行运算(如每个元素乘 5)
li = [1, 2, 3, 4]
# 推导式:每个元素乘5后打印(也可生成新列表)
[i * 5 for i in li] # 输出:[5, 10, 15, 20]
(2)带条件格式:[表达式 for 变量 in 可迭代对象 if 条件]
- 逻辑:变量遍历可迭代对象,仅当「条件成立」时,才将「表达式」结果加入新列表。
示例:生成 1~10 中的所有奇数
# 传统方式
li1 = []
for i in range(1, 11):if i % 2 == 1:li1.append(i)
print(li1) # 输出:[1, 3, 5, 7, 9]# 列表推导式:一行实现
li2 = [i for i in range(1, 11) if i % 2 == 1]
print(li2) # 输出:[1, 3, 5, 7, 9]
2. 列表嵌套(列表中的列表)
列表的元素可以是另一个列表,形成「嵌套列表」,常用于表示二维数据(如表格、矩阵)。
(1)定义嵌套列表
# 嵌套列表:外层列表有5个元素,第4个元素是内层列表 [4,5,6]
li = [1, 2, 3, [4, 5, 6], 7]
(2)访问嵌套元素
通过「多层下标」访问:外层列表下标[内层列表下标]
li = [1, 2, 3, [4, 5, 6], 7]
print(li[3]) # 输出内层列表:[4, 5, 6](外层下标3)
print(li[3][2]) # 输出内层列表的下标2元素:6(先取外层3,再取内层2)
print(li[4]) # 输出外层列表下标4的元素:7