当前位置: 首页 > news >正文

第 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]) # 输出: cherry

4.1.2 负数索引

核心知识点

负数索引从列表的末尾开始计数,-1表示最后一个元素,-2表示倒数第二个,依此类推。

示例

fruits = ['apple', 'banana', 'cherry'] print(fruits[-1]) # 输出: cherry print(fruits[-2]) # 输出: banana

4.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)) # 输出: 3

4.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.2innot in操作符

核心知识点

in操作符检查一个值是否在列表中,not in则相反。

示例

fruits = ['apple', 'banana', 'cherry'] print('banana' in fruits) # 输出: True print('orange' not in fruits) # 输出: True

4.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 5

4.2.4enumerate()函数和列表一起使用

核心知识点

enumerate()函数用于在循环中同时获取索引和元素。

示例

fruits = ['apple', 'banana', 'cherry'] for index, fruit in enumerate(fruits): print(f"Index {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')) # 输出: 1

4.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()对列表进行原地排序。默认是升序。可以使用reverse=True参数进行降序排序。

示例

numbers = [3, 1, 4, 1, 5] numbers.sort() print(numbers) # 输出: [1, 1, 3, 4, 5] numbers.sort(reverse=True) 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", "Don't 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) # 输出: Hello

4.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 小程序: Conway's 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
  • 高级概念:可变与不可变类型、元组、引用、浅拷贝与深拷贝。
  • 通过多个小程序和实践项目加深了理解。
http://www.jsqmd.com/news/578694/

相关文章:

  • [特殊字符] 镜像视界|视频不再记录世界,而是计算世界:空间智能的崛起——基于Pixel-to-Space与动态三维重构的空间智能感知体系
  • 基于MATLAB的简单带有GUI界面的交通路标识别项目
  • 新手电工必看!3个致命接线错误,90%的人都踩过坑
  • 前端代码可读性优化:让你的代码不再像天书
  • Ostrakon-VL-8B对比评测:主流开源多模态模型在餐饮场景的较量
  • 大厂vs.垂直玩家:电商AI视频工具怎么选?易元AI的“专注”才是护城河
  • 人工智能+督导闭环,奥尔特云街道网格治理闭环系统
  • 全网独家!加入风机模块的IEEE9模型!
  • 树莓派5B - 零基础应用开发系列(第二期):从环境配置到首个物联网应用
  • 数组与字典解决方案第三十六讲 将记录集赋值给数组以及转置的利用
  • OpenClaw隐私保护方案:Qwen3-14B本地处理敏感数据
  • FileConfig嵌入式配置管理库:轻量级INI解析与SD卡持久化方案
  • 什么是事务?事务的生命周期,四大属性(ACID重要)
  • SLB和Azule Energy扩大企业数字化运营规模以强化安哥拉能源供应
  • 写完论文才发现:原来好写作AI才是本科毕业的“隐藏外挂”
  • 数学专业考CDA数据分析师证书值不值?适合哪些求职方向和岗位
  • 50万行源码意外泄露:Anthropic“翻车”给AI开发者敲响了什么警钟?
  • 详解Kadane算法(附C++实现)—— 一维最大子段和最优解法
  • 破解非标设计人才供需错配:苏州非标机械设计培训机构如何通过3+1全链路实战方法论实现高质量就业? - 博客湾
  • 为什么某系统我们没有源代码,却比有源代码的高级工程师更能看透这个系统
  • 嵌入式ONPS协议栈:轻量级TCP/IP实现与优化
  • 剑指offer-19、顺时针打印矩阵
  • 当 AI 开始自己写代码,我更在意的是它到底做了什么
  • OpenClaw多模型切换实战:千问3.5-35B-A3B-FP8与文本模型的协作流程
  • 低成本自动化:OpenClaw+Gemma-3-12b-it替代Zapier的5个场景
  • ASA5545防火墙引入路由
  • 10个数字的冒泡排序魔法
  • 三次转身 一生向光:江俊在社群团购的路上奔跑 - 博客湾
  • 卸载Postman:ChatGPT调试API的致命效率
  • OpenClaw文件管理革命:Qwen3.5-9B智能分类与重命名方案