Python基础 : 列表(List)
文章目录
一、知识点详解
1.1 列表的定义
List
是一种数据结构,可以存储多个元素。
- 列表中的元素可以是任何数据类型(
允许是混合类型
)。 - 列表用方括号
[]
表示,元素用逗号(,
)分隔 - 列表是
可变的
,可以添加、删除或修改元素。 - 空列表
[]
对应布尔值False
,非空列表为True
。
示例:
empty_list = []
print(bool(empty_list)) # 空列表的布尔值为 False
mixed_list = ["苹果", 3, True] # 混合类型列表
print(bool(mixed_list)) # 非空列表的布尔值为 True
1.2 索引与切片
- 索引: 通过索引访问元素(索引从 0 开始)。
在 Python 中,列表的索引操作提供了正向和反向两种方式,方便从不同方向访问元素。
索引方向 | 示例 | 说明 |
---|---|---|
正向索引 | fruits[0] | 第一个元素(苹果) |
反向索引 | fruits[-1] | 最后一个元素(True) |
- 切片: 切片用于获取一部分元素(生成
新列表
)。- 语法:
list[start:stop:step]
,其中start
表示起始索引,stop
表示结束索引,step
表示步长(默认为 1) - 注意:列表的切片操作,同样遵循
左闭右开
原则,即start
能取到,stop
取不到
- 语法:
示例:
nums = [1, 2, 3, 4, 5]
print(nums[1:3]) # [2, 3](取索引1到2,不包含3)
print(nums[:3]) # [1, 2, 3](从开头到索引2)
print(nums[2:]) # [3, 4, 5](从索引2到末尾)
print(nums[1:4:2]) # [2, 4](从索引1到3,每隔一个取一个)
print(nums[::]) # [1, 2, 3, 4, 5](复制列表)
print(nums[::2]) # [1, 3, 5](每隔一个取一个)
print(nums[::-1]) # [5, 4, 3, 2, 1](反转列表)
print(nums[-2:]) # [4, 5](从倒数第二个到最后一个)
print(nums[-3:-1]) # [3, 4](从倒数第三个到倒数第二个,不包含最后一个)
new_nums = nums[::] # 复制列表
print(new_nums) # [1, 2, 3, 4, 5]
print(new_nums is nums) # False(新列表)
print(new_nums == nums) # True(内容相同)
1.3 基础操作
- 修改元素:
fruits[1] = "橘子"
。
由于列表是可变的,通过索引可以直接修改列表中的元素。
在修改元素时,要确保索引在列表的有效范围内,否则会引发IndexError
异常。 - 获取长度:
len(fruits)
。
len()
函数用于返回列表中元素的数量,它是一个内置函数,使用方便。
在处理列表时,经常需要知道列表的长度,以便进行循环遍历或索引操作。 - 检查存在性:
"苹果" in fruits
。
in
关键字用于检查某个元素是否存在于列表中,返回一个布尔值。
这在判断列表中是否包含特定元素时非常有用。
1.4 添加元素
append()
:末尾追加单个元素
append()
方法会将一个元素添加到列表的末尾,该元素可以是任何数据类型extend()
:合并另一个可迭代对象的元素
extend()
方法会将一个可迭代对象(如列表、元组、字符串等)的所有元素添加到列表的末尾insert()
: 指定索引位置插入元素
insert()
方法可以在列表的指定索引位置插入一个元素,原索引位置及之后的元素会依次后移
示例:
nums = [1,2,3]
nums.append(4) # [1,2,3,4]
nums.extend([5,6]) # [1,2,3,4,5,6]
nums.insert(3,'aaa') # [1,2,3,'aaa',4,5,6]
三种添加方式对比
方法 | 作用 | 参数 | 结果 | 注意事项 |
---|---|---|---|---|
append(x) | 末尾追加单个元素 | 单个元素 x | 元素添加到列表末尾 | 添加列表时会形成嵌套列表(如 append([a,b]) ) |
extend(iter) | 合并可迭代对象的所有元素 | 可迭代对象 iter | 元素拆解后逐个添加到末尾 | 平级合并,不保留原可迭代对象结构 |
insert(i, x) | 指定索引 i 插入元素 | 索引 i 和元素 x | 元素插入 i 处,后续元素后移 | 索引超出范围时默认添加到末尾 |
1.5 删除元素
-
remove(x)
:删除列表中第一个匹配的元素x
直接指定要删除的元素值,而非索引
若元素不存在,会引发ValueError
异常 -
pop([i])
:删除并返回返回被删除的元素(默认删除最后一个元素)
参数i
可选,省略时默认删除最后一个元素(等效于pop(-1)
)
索引越界会引发IndexError
异常 -
del 列表[i]
:通过索引删除指定位置的元素(或删除整个列表)
i
为元素索引,支持正向(0 开始)和反向(-1 开始)索引
也可删除切片(如del 列表[1:3]
)或直接删除列表对象(del 列表
)
示例:
# remove(x) 按值删除
nums = [1, 2, 2, 3] # 原始列表包含重复元素 2
nums.remove(2) # 删除第一个出现的 2
print(nums) # 输出: [1, 2, 3]
# pop([i]) 按索引删除
nums = [1, 2, 3, 4, 5] # 原始列表
removed = nums.pop(2) # 删除索引为 2 的元素 (3)
print(nums) # 输出: [1, 2, 4, 5]
print(removed) # 输出: 3 (被删除的元素)
nums.pop() # 默认删除最后一个元素 (5)
print(nums) # 输出: [1, 2, 4]
# del 列表[i] 按索引/切片删除
nums = [1, 2, 3, 4, 5] # 原始列表
del nums[2] # 删除索引为 2 的元素 (3)
print(nums) # 输出: [1, 2, 4, 5]
del nums[1:3] # 删除索引为 1 到 2 的元素 (2, 4)
print(nums) # 输出: [1, 5]
del nums # 删除整个列表
# print(nums) # 若取消注释,会报错(NameError)
三种删除方式对比
方法 | 操作依据 | 返回值 | 典型场景 |
---|---|---|---|
remove(x) | 元素值(首个匹配) | 无(None) | 已知元素值,删除首次出现项 |
pop([i]) | 索引(默认最后一个) | 返回删除的元素 | 需要获取并删除指定位置元素 |
del 列表[i] | 索引/切片 | 无(None) | 批量删除(切片)或销毁列表 |
二、说明示例
2.1 购物清单操作
# 购物清单操作
shopping_cart = ["苹果", "牛奶", "薯片"]
print("初始购物车:", shopping_cart)
# 索引与切片操作
print("购物车第一个商品:", shopping_cart[0]) # 正向索引
print("购物车最后一个商品:", shopping_cart[-1]) # 反向索引
print("购物车部分商品:", shopping_cart[0:1]) # 切片操作
# 修改元素
shopping_cart[1] = "酸奶"
print("修改后购物车:", shopping_cart)
# 获取购物车长度
print("购物车商品数量:", len(shopping_cart))
# 检查元素存在性
print("购物车是否有苹果:", "苹果" in shopping_cart)
# 添加元素
shopping_cart.append("面包") # 末尾追加单个元素
print("追加面包后购物车:", shopping_cart)
shopping_cart.extend(["鸡蛋", "火腿肠"]) # 合并另一个可迭代对象的元素
print("添加鸡蛋和火腿肠后购物车:", shopping_cart)
shopping_cart.insert(2, "巧克力") # 指定索引位置插入元素
print("插入巧克力后购物车:", shopping_cart)
# 删除元素
shopping_cart.remove("苹果") # 按值删除第一个匹配的元素
print("移除苹果后购物车:", shopping_cart)
removed_item = shopping_cart.pop(1) # 按索引删除元素并返回被删除的元素
print("移除索引为 1 的物品后购物车:", shopping_cart)
print("被移除的物品:", removed_item)
del shopping_cart[2] # 通过索引删除指定位置的元素
print("删除索引为 2 的物品后购物车:", shopping_cart)
del shopping_cart[0:1] # 通过切片删除部分元素
print("切片删除后购物车:", shopping_cart)
三、知识点总结
- 核心特性:可变、有序、任意类型、索引从
0
开始。 - 常用操作:
- 添加:
append()
(单元素)、extend()
(批量)、insert()
(指定位置)。 - 删除:
remove()
(按值)、pop()
(按索引)、del
(索引/列表)。 - 其他:切片取值、
len()
长度、in
存在性检查。
- 添加:
- 注意点:避免索引越界(先检查
len()
),区分append
与extend
的使用场景。
四、知识点考察题
以下哪项操作可以生成嵌套列表()
- A.
a =[1, 2]; a.extend([3, 4])
- B.
a =[1, 2]; a.append([3, 4])
- C.
a =[1, 2]; a += [3, 4]
- D.
a =[1, 2]; a[len(a):] = [3, 4]
答案:B