【Python学习】列表(List)
目录
2. extend() 方法:添加可迭代对象的元素到列表末尾
列表(List)是 Python 中最常用、最灵活的内置数据结构之一,属于有序、可变、可重复的序列。它可以存储不同数据类型的元素(如数字、字符串、列表、字典等),是 Python 编程中处理数据集合的核心工具。
本教程将从基础概念、创建方式、访问元素、增删改查、切片、常用方法、嵌套列表、实战案例等方面全面讲解列表的用法,适合 Python 初学者系统学习。
一、列表的核心特性
在学习具体操作前,先理解列表的关键特性,能帮你快速掌握其使用逻辑:
-
有序性:列表中的元素有固定的顺序,通过索引可精准定位元素,顺序不会自动改变(除非手动修改)。
-
可变性:列表创建后,可对元素进行添加、删除、修改操作,区别于不可变的元组(Tuple)。
-
异构性:同一个列表中可存储不同数据类型的元素(如
[1, "Python", [2,3], True])。 -
可重复性:列表允许包含重复的元素(如
[2,2,3,3])。 -
动态大小:列表的长度可动态增减,无需提前定义固定长度。
二、列表的创建
Python 提供多种方式创建列表,最常用的是方括号 [] 和 list() 函数,具体如下:
1. 基础创建(方括号 [])
这是最简洁、最常用的创建方式,直接在方括号中用逗号 , 分隔元素。
# 1. 空列表(后续可添加元素) empty_list = [] print("空列表:", empty_list) # 输出:空列表: [] # 2. 存储单一数据类型的列表 num_list = [1, 2, 3, 4, 5] # 整数列表 str_list = ["a", "b", "c", "d"] # 字符串列表 bool_list = [True, False, True] # 布尔值列表 # 3. 存储多种数据类型的列表(异构列表) mixed_list = [1, "Python", 3.14, [2, 3], {"name": "Tom"}] print("异构列表:", mixed_list) # 输出:异构列表: [1, 'Python', 3.14, [2, 3], {'name': 'Tom'}]
2. 使用 list() 函数创建
list() 函数可将可迭代对象(如字符串、元组、集合、range 对象等)转换为列表。
# 1. 将字符串转为列表(每个字符作为一个元素) str_to_list = list("Python") print("字符串转列表:", str_to_list) # 输出:字符串转列表: ['P', 'y', 't', 'h', 'o', 'n'] # 2. 将元组转为列表(元组是不可变的,转列表后可修改) tuple_to_list = list((10, 20, 30)) print("元组转列表:", tuple_to_list) # 输出:元组转列表: [10, 20, 30] # 3. 将 range 对象转为列表(生成连续数字的列表) range_to_list = list(range(1, 6)) # 生成1-5的整数 print("range转列表:", range_to_list) # 输出:range转列表: [1, 2, 3, 4, 5] # 4. 将集合转为列表(集合是无序的,转列表后顺序可能变化) set_to_list = list({1, 2, 3, 4}) print("集合转列表:", set_to_list) # 输出:集合转列表: [1, 2, 3, 4](顺序可能随机)
3. 快速生成列表(列表推导式)
列表推导式是 Python 简洁高效的语法,可快速生成符合规则的列表,后续会详细讲解,这里先看基础示例:
# 生成1-10的偶数列表 even_list = [i * 2 for i in range(1, 6)] print("偶数列表:", even_list) # 输出:偶数列表: [2, 4, 6, 8, 10]
三、访问列表元素
列表的元素访问主要通过索引(Index)和切片(Slice)实现,Python 支持正向索引和反向索引。
1. 正向索引与反向索引
-
正向索引:从列表第一个元素开始,索引从
0开始递增。 -
反向索引:从列表最后一个元素开始,索引从
-1开始递减(-1是最后一个元素,-2是倒数第二个,以此类推)。
示例:
# 定义一个水果列表 fruit_list = ["苹果", "香蕉", "橙子", "葡萄", "芒果"] # 正向索引访问 print("第一个元素:", fruit_list[0]) # 输出:第一个元素: 苹果 print("第三个元素:", fruit_list[2]) # 输出:第三个元素: 橙子 # 反向索引访问 print("最后一个元素:", fruit_list[-1]) # 输出:最后一个元素: 芒果 print("倒数第二个元素:", fruit_list[-2]) # 输出:倒数第二个元素: 葡萄
2. 索引越界问题
如果访问的索引超出列表的范围,Python 会抛出 IndexError 异常。
# fruit_list 长度为5,索引范围是0-4,-5到-1 # print(fruit_list[5]) # 报错:IndexError: list index out of range # print(fruit_list[-6]) # 报错:IndexError: list index out of range
3. 切片访问(获取子列表)
切片可以获取列表中连续的多个元素,生成新的列表,语法格式为:
列表[起始索引:结束索引:步长]
关键规则:
-
切片是左闭右开的,即包含起始索引的元素,不包含结束索引的元素。
-
省略起始索引:默认从
0开始。 -
省略结束索引:默认到列表末尾。
-
省略步长:默认步长为
1(正向取元素)。 -
步长为负数:反向取元素。
示例:
num_list = [10, 20, 30, 40, 50, 60, 70] # 基础切片 print(num_list[1:4]) # 索引1-3(不包含4),输出:[20, 30, 40] print(num_list[:3]) # 从0开始到2,输出:[10, 20, 30] print(num_list[3:]) # 从3开始到末尾,输出:[40, 50, 60, 70] print(num_list[:]) # 复制整个列表,输出:[10, 20, 30, 40, 50, 60, 70] # 带步长的切片 print(num_list[1:6:2]) # 步长为2,取索引1、3、5,输出:[20, 40, 60] print(num_list[::3]) # 从0开始,步长3,输出:[10, 40, 70] # 反向切片 print(num_list[::-1]) # 步长-1,反转列表,输出:[70, 60, 50, 40, 30, 20, 10] print(num_list[-3:-1]) # 倒数3到倒数1(不包含),输出:[50, 60]
四、修改列表元素
列表是可变对象,可通过索引直接修改指定位置的元素,也可通过切片修改多个元素。
1. 修改单个元素
通过索引定位元素,直接赋值新值。
fruit_list = ["苹果", "香蕉", "橙子"] print("修改前:", fruit_list) # 输出:修改前: ['苹果', '香蕉', '橙子'] # 修改索引1的元素 fruit_list[1] = "草莓" print("修改后:", fruit_list) # 输出:修改后: ['苹果', '草莓', '橙子']
2. 修改多个元素(切片赋值)
通过切片获取连续元素,再赋值为可迭代对象(如列表、元组、字符串等),赋值的长度可与切片长度不同。
num_list = [1, 2, 3, 4, 5] print("修改前:", num_list) # 输出:修改前: [1, 2, 3, 4, 5] # 替换索引1-2的元素为新列表 num_list[1:3] = [20, 30, 40] print("修改后:", num_list) # 输出:修改后: [1, 20, 30, 40, 4, 5] # 替换索引0的元素为字符串(字符串是可迭代对象,每个字符作为元素) num_list[0:1] = "678" print("再次修改:", num_list) # 输出:再次修改: ['6', '7', '8', 20, 30, 40, 4, 5]
五、添加列表元素
Python 提供多种方法向列表中添加元素,包括添加单个元素、添加多个元素、在指定位置添加元素等。
1. append() 方法:添加单个元素到列表末尾
这是最常用的添加方法,语法:列表.append(元素),无返回值,直接修改原列表。
fruit_list = ["苹果", "香蕉"] print("添加前:", fruit_list) # 输出:添加前: ['苹果', '香蕉'] # 添加单个元素 fruit_list.append("橙子") print("添加后:", fruit_list) # 输出:添加后: ['苹果', '香蕉', '橙子'] # 添加列表(嵌套列表) fruit_list.append(["葡萄", "芒果"]) print("嵌套添加后:", fruit_list) # 输出:嵌套添加后: ['苹果', '香蕉', '橙子', ['葡萄', '芒果']]
2. extend() 方法:添加可迭代对象的元素到列表末尾
将可迭代对象(列表、元组、字符串等)的每个元素依次添加到列表末尾,语法:列表.extend(可迭代对象)。
num_list = [1, 2, 3] print("添加前:", num_list) # 输出:添加前: [1, 2, 3] # 扩展列表 num_list.extend([4, 5, 6]) print("扩展列表后:", num_list) # 输出:扩展列表后: [1, 2, 3, 4, 5, 6] # 扩展元组 num_list.extend((7, 8)) print("扩展元组后:", num_list) # 输出:扩展元组后: [1, 2, 3, 4, 5, 6, 7, 8] # 扩展字符串 num_list.extend("90") print("扩展字符串后:", num_list) # 输出:扩展字符串后: [1, 2, 3, 4, 5, 6, 7, 8, '9', '0']
3. insert() 方法:在指定位置插入元素
语法:列表.insert(索引, 元素),将元素插入到指定索引位置,原索引及后续元素依次后移。
fruit_list = ["苹果", "橙子"] print("插入前:", fruit_list) # 输出:插入前: ['苹果', '橙子'] # 在索引1的位置插入“香蕉” fruit_list.insert(1, "香蕉") print("插入后:", fruit_list) # 输出:插入后: ['苹果', '香蕉', '橙子'] # 在索引0的位置插入元素(开头) fruit_list.insert(0, "草莓") print("开头插入后:", fruit_list) # 输出:开头插入后: ['草莓', '苹果', '香蕉', '橙子'] # 索引超过列表长度:插入到列表末尾 fruit_list.insert(10, "西瓜") print("末尾插入后:", fruit_list) # 输出:末尾插入后: ['草莓', '苹果', '香蕉', '橙子', '西瓜']
4. 切片赋值:批量添加元素
通过切片赋值的方式,可在指定位置添加多个元素,本质是“替换空切片”。
num_list = [1, 5] print("添加前:", num_list) # 输出:添加前: [1, 5] # 在索引1的位置插入[2,3,4] num_list[1:1] = [2, 3, 4] print("添加后:", num_list) # 输出:添加后: [1, 2, 3, 4, 5]
六、删除列表元素
Python 提供多种删除元素的方式,包括删除单个元素、删除指定索引元素、清空列表、删除列表本身等。
1. del 语句:删除元素或整个列表
del 是 Python 的关键字,可通过索引/切片删除元素,也可直接删除整个列表。
fruit_list = ["苹果", "香蕉", "橙子", "葡萄"] # 1. 删除单个元素(按索引) del fruit_list[1] print("删除单个元素后:", fruit_list) # 输出:删除单个元素后: ['苹果', '橙子', '葡萄'] # 2. 删除多个元素(按切片) del fruit_list[1:] print("删除切片元素后:", fruit_list) # 输出:删除切片元素后: ['苹果'] # 3. 删除整个列表(删除后列表不存在) del fruit_list # print(fruit_list) # 报错:NameError: name 'fruit_list' is not defined
2. pop() 方法:删除指定索引的元素并返回该元素
语法:列表.pop(索引),若省略索引,默认删除并返回最后一个元素。
num_list = [10, 20, 30, 40] # 1. 删除最后一个元素 last_num = num_list.pop() print("删除的元素:", last_num) # 输出:删除的元素: 40 print("删除后列表:", num_list) # 输出:删除后列表: [10, 20, 30] # 2. 删除指定索引元素 mid_num = num_list.pop(1) print("删除的元素:", mid_num) # 输出:删除的元素: 20 print("删除后列表:", num_list) # 输出:删除后列表: [10, 30]
3. remove() 方法:删除指定值的元素
语法:列表.remove(值),删除第一个匹配的元素,若值不存在则报错。
fruit_list = ["苹果", "香蕉", "橙子", "香蕉"] # 删除第一个“香蕉” fruit_list.remove("香蕉") print("删除后:", fruit_list) # 输出:删除后: ['苹果', '橙子', '香蕉'] # 删除不存在的元素(会报错) # fruit_list.remove("葡萄") # 报错:ValueError: list.remove(x): x not in list
4. clear() 方法:清空列表所有元素
语法:列表.clear(),保留空列表,不删除列表本身。
num_list = [1, 2, 3, 4] print("清空前:", num_list) # 输出:清空前: [1, 2, 3, 4] num_list.clear() print("清空后:", num_list) # 输出:清空后: []
七、列表的常用内置方法
除了上述增删改方法,列表还提供了丰富的内置方法,可实现排序、查找、计数、反转等功能,以下是常用方法汇总:
|
方法 |
作用 |
语法 |
示例 |
|---|---|---|---|
|
|
查找指定值的第一个索引,不存在则报错 |
|
|
|
|
统计指定值在列表中出现的次数 |
|
|
|
|
对列表元素正向排序(修改原列表),默认升序 |
`列表 |
更多推荐



所有评论(0)