第 4 章 列表数据类型 知识点精讲
4.1 列表数据类型核心知识点列表是 Python 中最常用的数据结构之一是一个有序的、可变的元素集合。元素可以是不同的数据类型。示例fruits [apple, banana, cherry] mixed [1, hello, 3.14, True] empty_list []4.1.1 用索引取得列表中的单个值核心知识点列表中的每个元素都有一个索引从 0 开始。可以通过索引来访问单个元素。示例fruits [apple, banana, cherry] print(fruits[0]) # 输出: apple print(fruits[2]) # 输出: cherry4.1.2 负数索引核心知识点负数索引从列表的末尾开始计数-1表示最后一个元素-2表示倒数第二个依此类推。示例fruits [apple, banana, cherry] print(fruits[-1]) # 输出: cherry print(fruits[-2]) # 输出: banana4.1.3 利用切片取得子列表核心知识点切片用于获取列表的一个子列表。语法为list[start:end:step]。start起始索引包含默认为 0。end结束索引不包含默认为列表长度。step步长默认为 1。示例numbers [0, 1, 2, 3, 4, 5] print(numbers[1:4]) # 输出: [1, 2, 3] print(numbers[:3]) # 输出: [0, 1, 2] print(numbers[3:]) # 输出: [3, 4, 5] print(numbers[::2]) # 输出: [0, 2, 4] (步长为2) print(numbers[::-1]) # 输出: [5, 4, 3, 2, 1, 0] (反转列表)4.1.4 用len()函数获取列表的长度核心知识点len()函数返回列表中元素的个数。示例fruits [apple, banana, cherry] print(len(fruits)) # 输出: 34.1.5 用索引改变列表中的值核心知识点列表是可变的可以通过索引来修改特定位置的元素。示例fruits [apple, banana, cherry] fruits[1] blueberry print(fruits) # 输出: [apple, blueberry, cherry]4.1.6 列表连接和列表复制核心知识点连接 ()将两个列表合并成一个新列表。复制 (*)将列表重复指定次数。示例list1 [1, 2, 3] list2 [4, 5, 6] print(list1 list2) # 输出: [1, 2, 3, 4, 5, 6] print(list1 * 3) # 输出: [1, 2, 3, 1, 2, 3, 1, 2, 3]4.1.7 用del语句从列表中删除值核心知识点del语句可以删除列表中指定索引的元素。示例fruits [apple, banana, cherry] del fruits[1] print(fruits) # 输出: [apple, cherry]4.2 使用列表4.2.1 列表用于循环核心知识点for循环可以遍历列表中的每个元素。示例fruits [apple, banana, cherry] for fruit in fruits: print(fruit)4.2.2in和not in操作符核心知识点in操作符检查一个值是否在列表中not in则相反。示例fruits [apple, banana, cherry] print(banana in fruits) # 输出: True print(orange not in fruits) # 输出: True4.2.3 多重赋值技巧核心知识点可以一次性将列表中的值赋给多个变量。变量的数量必须与列表长度相同。示例coordinates (10, 20) x, y coordinates print(x) # 输出: 10 print(y) # 输出: 20 # 交换变量值 a 5 b 10 a, b b, a print(a, b) # 输出: 10 54.2.4enumerate()函数和列表一起使用核心知识点enumerate()函数用于在循环中同时获取索引和元素。示例fruits [apple, banana, cherry] for index, fruit in enumerate(fruits): print(fIndex {index}: {fruit})4.2.5random.choice()和random.shuffle()与列表一起使用核心知识点random.choice(list)从列表中随机选择一个元素。random.shuffle(list)随机打乱列表的顺序原地修改。示例import random numbers [1, 2, 3, 4, 5] print(random.choice(numbers)) # 随机输出一个数字 random.shuffle(numbers) print(numbers) # 输出打乱后的列表4.3 增强的赋值操作核心知识点增强赋值操作符,-,*,/等可以简化对列表的操作。示例numbers [1, 2, 3] numbers [4, 5] # 等价于 numbers numbers [4, 5] print(numbers) # 输出: [1, 2, 3, 4, 5]4.4 方法4.4.1 用index()方法在列表中查找值核心知识点list.index(value)返回第一个匹配值的索引。如果值不存在会引发ValueError。示例fruits [apple, banana, cherry] print(fruits.index(banana)) # 输出: 14.4.2 用append()方法和insert()方法在列表中添加值核心知识点list.append(value)在列表末尾添加一个元素。list.insert(index, value)在指定索引位置插入一个元素。示例fruits [apple, banana] fruits.append(cherry) print(fruits) # 输出: [apple, banana, cherry] fruits.insert(1, blueberry) print(fruits) # 输出: [apple, blueberry, banana, cherry]4.4.3 用remove()方法从列表中删除值核心知识点list.remove(value)删除第一个匹配的元素。如果值不存在会引发ValueError。示例fruits [apple, banana, cherry, banana] fruits.remove(banana) print(fruits) # 输出: [apple, cherry, banana]4.4.4 用sort()方法将列表中的值排序核心知识点list.sort()对列表进行原地排序。默认是升序。可以使用reverseTrue参数进行降序排序。示例numbers [3, 1, 4, 1, 5] numbers.sort() print(numbers) # 输出: [1, 1, 3, 4, 5] numbers.sort(reverseTrue) print(numbers) # 输出: [5, 4, 3, 1, 1] words [banana, apple, cherry] words.sort() print(words) # 输出: [apple, banana, cherry]4.4.5 用reverse()方法反转列表中的值核心知识点list.reverse()反转列表的顺序原地修改。示例numbers [1, 2, 3, 4, 5] numbers.reverse() print(numbers) # 输出: [5, 4, 3, 2, 1]4.5 例子程序神奇 8 球和列表核心逻辑使用列表存储 8 球的答案然后随机选择一个进行回答。示例代码import random answers [ It is certain, It is decidedly so, Ask again later, Cannot predict now, Dont count on it ] question input(Ask the Magic 8-Ball a question: ) print(random.choice(answers))4.6 列表类型4.6.1 可变和不可变数据类型核心知识点可变类型列表list、字典dict、集合set。它们的值可以被修改。不可变类型整数int、浮点数float、字符串str、元组tuple。它们的值不能被修改修改会创建一个新对象。示例# 列表是可变的 my_list [1, 2, 3] my_list[0] 100 print(my_list) # 输出: [100, 2, 3] # 字符串是不可变的 my_str hello # my_str[0] H # 错误字符串不可变 new_str H my_str[1:] print(new_str) # 输出: Hello4.6.2 元组数据类型核心知识点元组是不可变的列表使用圆括号()定义。示例my_tuple (1, 2, 3) print(my_tuple[0]) # 输出: 1 # my_tuple[0] 100 # 错误元组不可变 # 单个元素的元组需要加逗号 single_tuple (5,)4.6.3 用list()和tuple()函数来转换类型核心知识点list()和tuple()函数可以将序列如字符串、元组、列表转换为列表或元组。示例my_tuple (1, 2, 3) my_list list(my_tuple) print(my_list) # 输出: [1, 2, 3] my_list [4, 5, 6] my_tuple tuple(my_list) print(my_tuple) # 输出: (4, 5, 6) # 将字符串转换为字符列表 s hello char_list list(s) print(char_list) # 输出: [h, e, l, l, o]4.7 引用4.7.1 标识和id()函数核心知识点每个对象都有一个唯一的标识。id()函数返回对象的标识。示例a [1, 2, 3] b a print(id(a)) # 输出 a 的标识 print(id(b)) # 输出 b 的标识与 a 相同4.7.2 传递引用核心知识点当你将列表作为参数传递给函数时传递的是引用。函数内部对列表的修改会影响原始列表。示例def modify_list(lst): lst.append(4) my_list [1, 2, 3] modify_list(my_list) print(my_list) # 输出: [1, 2, 3, 4]4.7.3copy模块的copy()和deepcopy()函数核心知识点浅拷贝 (copy.copy())创建一个新列表但列表中的元素仍然是原始元素的引用。深拷贝 (copy.deepcopy())创建一个完全独立的新列表所有嵌套元素也被复制。示例import copy original [1, [2, 3], 4] # 浅拷贝 shallow_copy copy.copy(original) shallow_copy[1][0] 200 print(original) # 输出: [1, [200, 3], 4] (原始列表被修改) # 深拷贝 deep_copy copy.deepcopy(original) deep_copy[1][0] 2 print(original) # 输出: [1, [200, 3], 4] (原始列表不受影响)4.8 小程序: Conways Game of Life核心逻辑康威生命游戏是一个细胞自动机。在一个二维网格中每个细胞有两种状态活或死。状态由其周围 8 个细胞的状态决定。示例代码简化版import random import time WIDTH 20 HEIGHT 10 # 创建初始网格 grid [] for _ in range(HEIGHT): row [] for _ in range(WIDTH): row.append(random.randint(0, 1)) grid.append(row) while True: # 打印网格 print(\n * 10) for row in grid: print(.join([# if cell else for cell in row])) # 创建新网格 new_grid [] for y in range(HEIGHT): new_row [] for x in range(WIDTH): # 计算邻居数量 neighbors 0 for dy in (-1, 0, 1): for dx in (-1, 0, 1): if dy 0 and dx 0: continue ny y dy nx x dx if 0 ny HEIGHT and 0 nx WIDTH: neighbors grid[ny][nx] # 应用规则 if grid[y][x] 1: if neighbors 2 or neighbors 3: new_row.append(0) else: new_row.append(1) else: if neighbors 3: new_row.append(1) else: new_row.append(0) new_grid.append(new_row) grid new_grid time.sleep(0.5)4.9 小结本章讲解了 Python 列表的核心概念基本操作索引、切片、长度、修改、连接、复制、删除。常用方法append,insert,remove,sort,reverse,index。高级概念可变与不可变类型、元组、引用、浅拷贝与深拷贝。通过多个小程序和实践项目加深了理解。