Python3 列表超详细新手教程全示例 逐点讲解 避坑指南列表list是 Python 中最常用的有序可变容器可以一次性存储多个不同类型的数据相当于一个 “能随时增减、修改内容的有序货架”。它是后续学习循环、数据处理的基础本文从零开始逐点讲解所有代码都可直接复制运行验证。一、什么是列表怎么定义1. 基础语法列表用英文方括号[]包裹内部多个元素用英文逗号,分隔元素可以是数字、字符串、布尔值甚至另一个列表。2. 基础示例# 存储同类型数据多个名字 names [小明, 小红, 小刚] # 存储混合类型数据数字、字符串、布尔值 mix_list [100, Python, True, 3.14] # 空列表后续动态添加数据用 empty_list [] print(names) print(type(names)) # 查看类型class list3. 列表核心特点新手必记有序元素有固定顺序每个位置有专属索引下标可变可以随时修改、添加、删除元素和字符串核心区别可重复同一个值可以出现多次支持多类型同一个列表可以放不同类型的数据二、列表的索引下标取值 / 改值和字符串一样列表每个元素都有索引编号通过索引可以取值、改值。核心规则正向索引从左往右从0开始编号反向索引从右往左从-1开始编号索引超出范围会直接报错新手高频错误✅ 列表可以通过索引修改元素字符串不行这是核心差异示例演示fruits [苹果, 香蕉, 橙子, 西瓜, 葡萄] # 元素 苹果 香蕉 橙子 西瓜 葡萄 # 正向 0 1 2 3 4 # 反向 -5 -4 -3 -2 -1 # 1. 通过索引取值 print(fruits[0]) # 苹果第一个元素 print(fruits[2]) # 橙子 print(fruits[-1]) # 葡萄最后一个元素 print(fruits[-2]) # 西瓜 # 2. 通过索引修改元素列表可变字符串不能这么做 fruits[1] 芒果 print(fruits) # [苹果, 芒果, 橙子, 西瓜, 葡萄]❌ 新手易错索引越界列表长度为 5最大正向索引是 4写fruits[5]会直接报错print(fruits[5]) # 报错IndexError: list index out of range三、列表的切片截取子列表切片就是从列表中截取一段连续的元素生成一个新列表语法规则和字符串切片完全一致。语法格式列表[起始索引:结束索引:步长]核心规则左闭右开包含起始索引元素不包含结束索引元素参数可省略起始省略默认从开头索引 0开始结束省略默认截取到末尾步长省略默认值为 1挨个取切片不会修改原列表返回的是全新列表基础示例nums [10, 20, 30, 40, 50, 60] # 截取索引1到4包含1不包含4 print(nums[1:4]) # [20, 30, 40] # 省略起始从开头到索引3 print(nums[:3]) # [10, 20, 30] # 省略结束从索引2到末尾 print(nums[2:]) # [30, 40, 50, 60] # 全省略复制整个列表 print(nums[:]) # [10, 20, 30, 40, 50, 60]带步长的切片nums [10, 20, 30, 40, 50, 60] # 步长为2隔一个取一个 print(nums[::2]) # [10, 30, 50] # 步长为-1反转列表 print(nums[::-1]) # [60, 50, 40, 30, 20, 10]四、列表的增删改查核心重点4.1 改修改指定位置元素通过索引直接赋值即可前面已经讲过再巩固一次lst [a, b, c] lst[0] A print(lst) # [A, b, c]4.2 增添加元素共 4 种常用方式适用场景不同新手重点区分append和extend。方法作用特点append(元素)末尾追加单个元素最常用一次加一个extend(可迭代对象)末尾批量追加多个元素把元素逐个拆开放进去insert(索引, 元素)指定索引位置插入元素后面元素自动后移 号拼接两个列表生成新列表原列表不变① append () 末尾追加单个元素lst [1, 2, 3] lst.append(4) print(lst) # [1, 2, 3, 4] # 追加一个列表会把整个列表当成一个元素 lst.append([5, 6]) print(lst) # [1, 2, 3, 4, [5, 6]]② extend () 批量追加元素把传入的列表 / 字符串等拆成单个元素逐个追加到末尾lst [1, 2, 3] lst.extend([4, 5, 6]) print(lst) # [1, 2, 3, 4, 5, 6]⚠️ 新手必辨append vs extendappend把参数当成一个整体加进去extend把参数拆成多个元素逐个加进去a [1,2] a.append([3,4]) # 结果[1,2,[3,4]] 长度1 b [1,2] b.extend([3,4]) # 结果[1,2,3,4] 长度2③ insert () 指定位置插入lst [a, b, c] # 在索引1的位置插入x后面元素后移 lst.insert(1, x) print(lst) # [a, x, b, c]④ 号拼接列表生成全新列表原两个列表都不变lst1 [1, 2] lst2 [3, 4] lst3 lst1 lst2 print(lst3) # [1, 2, 3, 4]4.3 删删除元素共 4 种常用方式按索引删、按值删、清空各有适用场景。方法 / 语句作用特点del 列表[索引]按索引删除指定元素纯删除无返回值pop(索引)删除并返回被删元素不写索引默认删最后一个有返回值remove(值)按值删除第一个匹配项找不到会报错clear()清空整个列表变成空列表① del 按索引删除lst [10, 20, 30, 40] del lst[1] # 删除索引1的元素20 print(lst) # [10, 30, 40]② pop () 删除并返回元素lst [10, 20, 30, 40] # 不写索引默认删除最后一个 last lst.pop() print(last) # 40被删掉的元素 print(lst) # [10, 20, 30] # 指定索引删除 num lst.pop(0) print(num) # 10 print(lst) # [20, 30]③ remove () 按值删除lst [苹果, 香蕉, 苹果, 橙子] lst.remove(苹果) # 删除第一个出现的苹果 print(lst) # [香蕉, 苹果, 橙子] # 不存在的值会报错 # lst.remove(西瓜) # 报错ValueError: list.remove(x): x not in list④ clear () 清空列表lst [1, 2, 3] lst.clear() print(lst) # []4.4 查查找与统计方法 / 函数作用返回值元素 in 列表判断元素是否存在True/False列表.index(元素)查找元素第一次出现的索引索引值找不到报错列表.count(元素)统计元素出现次数数字len(列表)统计列表元素个数数字max(列表)求最大值最大值min(列表)求最小值最小值示例演示nums [10, 20, 30, 20, 50] # 1. 判断是否存在 print(20 in nums) # True print(99 in nums) # False # 2. 找元素索引 print(nums.index(30)) # 2 # print(nums.index(99)) # 找不到报错 # 3. 统计次数 print(nums.count(20)) # 2 # 4. 长度 print(len(nums)) # 5 # 5. 最值 print(max(nums)) # 50 print(min(nums)) # 10⚠️ 注意max()/min()要求列表元素类型一致混合数字和字符串会报错。五、列表常用操作方法5.1 排序两种排序方式新手最容易搞混务必分清。① sort ()原地排序修改原列表无返回值直接对原列表排序默认从小到大没有返回值。nums [3, 1, 4, 2, 5] nums.sort() # 直接修改原列表 print(nums) # [1, 2, 3, 4, 5] # 倒序排序 nums.sort(reverseTrue) print(nums) # [5, 4, 3, 2, 1]❌ 新手大坑不要用变量接收 sort () 的结果res nums.sort() print(res) # Nonesort没有返回值② sorted ()返回新列表原列表不变Python 内置函数生成一个排序后的新列表原列表保持不变。nums [3, 1, 4, 2, 5] new_nums sorted(nums) print(new_nums) # [1, 2, 3, 4, 5]新列表 print(nums) # [3, 1, 4, 2, 5]原列表不变5.2 反转列表 reverse ()原地反转列表的顺序lst [a, b, c] lst.reverse() print(lst) # [c, b, a]5.3 列表复制新手高频坑❌ 错误方式直接赋值直接赋值只是给同一个列表起了个别名两个变量指向同一块内存改一个另一个跟着变list1 [1, 2, 3] list2 list1 # 只是多了一个名字还是同一个列表 list1[0] 99 print(list2) # [99, 2, 3] list2也跟着变了✅ 正确复制方式copy()方法list1 [1, 2, 3] list2 list1.copy() list1[0] 99 print(list2) # [1, 2, 3] 互不影响切片复制list2 list1[:] # 效果和copy()一样六、遍历列表循环逐个处理元素遍历就是把列表里的元素一个一个取出来处理是循环最常用的场景。方式 1直接遍历元素最常用适合只需要元素值不需要索引的场景fruits [苹果, 香蕉, 橙子] for fruit in fruits: print(f我喜欢吃{fruit})输出我喜欢吃苹果 我喜欢吃香蕉 我喜欢吃橙子方式 2遍历索引range len适合需要用到元素位置的场景fruits [苹果, 香蕉, 橙子] for i in range(len(fruits)): print(f第{i1}个水果是{fruits[i]})方式 3enumerate 同时取索引和值拓展更简洁的写法同时拿到索引和元素fruits [苹果, 香蕉, 橙子] for index, fruit in enumerate(fruits): print(f索引{index}{fruit})七、嵌套列表二维列表列表里的元素也可以是列表形成 “二维表格” 一样的结构叫嵌套列表 / 二维列表。1. 定义示例# 3个学生每个学生有3科成绩 scores [ [90, 85, 95], # 第0个学生 [88, 92, 80], # 第1个学生 [75, 80, 98] # 第2个学生 ]2. 取值方法两层索引第一层取子列表第二层取具体元素# 取第1个学生的第2科成绩 print(scores[1][2]) # 80 # 取第0个学生的第0科成绩 print(scores[0][0]) # 90八、拓展列表推导式快速生成列表一种简洁的生成列表的语法适合用简单规则生成批量数据新手先了解基础写法# 生成 0~9 的平方列表 # 普通写法 lst [] for i in range(10): lst.append(i**2) # 列表推导式写法 lst [i**2 for i in range(10)] print(lst) # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]九、新手高频易错点总结索引越界索引从 0 开始最大索引 长度 - 1超出会报错append 和 extend 混淆append 加整体extend 拆成逐个元素用变量接收 sort () 结果sort 原地修改返回 Nonesorted 才返回新列表直接赋值复制列表list2 list1会联动修改要用copy()或切片remove 删除不存在的值会报错删除前建议先用in判断是否存在混合类型求最值max()/min()要求元素类型一致不能数字字符串混用索引修改字符串只有列表能通过索引改值字符串不行不要搞混