⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

Python 列表 — 最常用的数据结构

学习列表的创建、索引、切片和常用方法 · 难度:入门 · +10XP

Python 列表 — 最强大的数据容器

一、什么是列表?为什么它是 Python 最常用的数据结构?

列表(List)是 Python 中最核心、最灵活的数据结构。它是一个有序、可变、可包含任意类型元素的容器。你可以把列表想象成一列有编号的储物柜:每个柜子有一个编号(索引),里面可以存放任何东西,而且你可以随时添加新的柜子、移除旧的柜子,或更换柜子里的物品。

为什么列表如此重要?

二、列表 vs 元组 vs 集合 — 三大序列对比

特性列表 list元组 tuple集合 set
写法[1, 2, 3](1, 2, 3){1, 2, 3}
可变性可变(可增删改)不可变(创建后不可改)可变
有序性有序有序无序(不保证顺序)
重复元素允许允许自动去重
索引访问支持支持不支持
作为字典键不可以可以不可以
内存占用较大较小中等
典型场景需频繁增删改的数据固定的配置、坐标去重、成员检查

三、列表方法速查表

方法功能返回值是否修改原列表
append(x)在末尾添加元素None
insert(i, x)在索引 i 处插入None
extend(iter)合并另一个可迭代对象None
remove(x)删除第一个值为 x 的元素None
pop(i=-1)删除并返回索引 i 的元素被删除的元素
clear()清空列表None
index(x)返回第一个值为 x 的索引整数索引
count(x)统计 x 出现的次数整数
sort(key=, reverse=)就地排序None
reverse()就地反转None
copy()浅拷贝新列表

四、详细代码示例(逐行注释)

# ======== 1. 创建列表的多种方式 ========
# 直接创建
fruits = ["苹果", "香蕉", "橙子"]     # 常用方式
mixed = [1, "hello", 3.14, True]     # 混合类型列表
nested = [[1, 2], [3, 4]]            # 嵌套列表(二维数组)

# 使用构造函数 numbers = list(range(10)) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] chars = list("Python") # ['P', 'y', 't', 'h', 'o', 'n']

# 列表推导式(List Comprehension,Python 特色!) squares = [x**2 for x in range(10)] # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] evens = [x for x in range(20) if x % 2 == 0] # 带条件的推导式:[0,2,4,...,18] pairs = [(x, y) for x in "AB" for y in "12"] # 笛卡尔积:[('A','1'),('A','2'),...]

# ======== 2. 索引和切片 ======== nums = [10, 20, 30, 40, 50] print(nums[0]) # 10 — 第一个元素(索引从 0 开始) print(nums[-1]) # 50 — 最后一个元素(负数从末尾倒着数) print(nums[1:4]) # [20, 30, 40] — 切片 [开始:结束](不包含结束索引) print(nums[:3]) # [10, 20, 30] — 从开头到索引 2 print(nums[2:]) # [30, 40, 50] — 从索引 2 到末尾 print(nums[::2]) # [10, 30, 50] — 步长为 2(隔一个取一个) print(nums[::-1]) # [50, 40, 30, 20, 10] — 步长为负 = 反转列表!

# ======== 3. 添加元素 ======== fruits = ["苹果", "香蕉"] fruits.append("橙子") # 末尾添加 → ['苹果', '香蕉', '橙子'] fruits.insert(1, "葡萄") # 在索引 1 处插入 → ['苹果', '葡萄', '香蕉', '橙子'] fruits.extend(["西瓜", "草莓"]) # 合并另一个列表 → 添加多个元素 print(fruits) # ['苹果', '葡萄', '香蕉', '橙子', '西瓜', '草莓']

# ======== 4. 删除元素 ======== fruits.remove("香蕉") # 删除第一个匹配的值(找不到会报错!) popped = fruits.pop() # 删除并返回最后一个元素 → '草莓' popped2 = fruits.pop(0) # 删除并返回索引 0 的元素 → '苹果' del fruits[1] # 用 del 语句删除指定索引 fruits.clear() # 清空所有元素 → [] # 安全删除:先检查 if "芒果" in fruits: fruits.remove("芒果")

# ======== 5. 查找和统计 ======== nums = [1, 3, 5, 3, 7, 3, 9] print(nums.index(3)) # 1 — 第一个 3 的索引 print(nums.index(3, 2)) # 3 — 从索引 2 开始找,找到索引 3 的 3 print(nums.count(3)) # 3 — 3 出现了 3 次 print(5 in nums) # True — 成员检查(推荐!) print(10 not in nums) # True — 不在列表中

# ======== 6. 排序 ======== nums = [3, 1, 4, 1, 5, 9, 2] nums.sort() # 就地升序排序 → [1, 1, 2, 3, 4, 5, 9] nums.sort(reverse=True) # 就地降序排序 → [9, 5, 4, 3, 2, 1, 1]

# 自定义排序(按字符串长度) words = ["apple", "pie", "a", "banana"] words.sort(key=len) # 按长度排序 → ['a', 'pie', 'apple', 'banana'] words.sort(key=lambda w: w[-1]) # 按最后一个字母排序

# sorted() 返回新列表(不改变原列表) original = [3, 1, 2] new_list = sorted(original) # original 不变!new_list = [1, 2, 3]

# ======== 7. 列表推导式高级用法 ======== # 带条件的推导 scores = [85, 92, 78, 95, 88] passed = [s for s in scores if s >= 90] # [92, 95]

# 映射转换 names = ["alice", "bob", "charlie"] upper_names = [n.upper() for n in names] # ['ALICE', 'BOB', 'CHARLIE']

# 嵌套推导(展平二维列表) matrix = [[1, 2], [3, 4], [5, 6]] flat = [x for row in matrix for x in row] # [1, 2, 3, 4, 5, 6]

# ======== 8. 常用内置函数配合列表 ======== nums = [3, 1, 4, 1, 5] print(len(nums)) # 5 — 长度 print(sum(nums)) # 14 — 总和 print(max(nums)) # 5 — 最大值 print(min(nums)) # 1 — 最小值 print(list(enumerate(nums))) # [(0,3),(1,1),(2,4),(3,1),(4,5)] — 带索引

# zip 组合多个列表 names = ["小明", "小红", "小刚"] scores = [85, 92, 78] for name, score in zip(names, scores): print(f"{name}:{score}分") # 同时遍历两个列表

# ======== 9. 列表复制陷阱(重要!) ======== a = [1, 2, [3, 4]] b = a # 不是复制!b 和 a 指向同一个对象 c = a.copy() # 浅拷贝:顶层复制,但嵌套列表仍是共享的 import copy d = copy.deepcopy(a) # 深拷贝:完全独立 a[2][0] = 999 print(b) # [1, 2, [999, 4]] — b 受影响(同一对象) print(c) # [1, 2, [999, 4]] — c 受影响(浅拷贝!) print(d) # [1, 2, [3, 4]] — d 不受影响(深拷贝!)

五、实践任务

  1. 创建一个空列表,用 append 添加 5 个数字,然后用 sort 排序并输出
  2. 使用列表推导式生成 1 到 100 中所有能被 3 整除但不能被 5 整除的数
  3. 编写函数 remove_duplicates(lst),接收一个列表,返回去重后的新列表(保持原顺序)
  4. 有一个学生成绩列表 [("小明", 85), ("小红", 92), ("小刚", 78)],按分数降序排序并输出
  5. 创建一个 3x3 的二维列表(矩阵),计算对角线元素之和
Ctrl+Enter
🚀 升级VIP
解锁全部课程+AI助手

🏆 学习排行

加载中...

📊 统计

📖 152 篇
0 完成
🔥 0