Python基础学习第三课:数据结构与文件操作

以下是Python基础学习第三课的完整内容,重点讲解数据结构(列表、字典、元组、集合)和文件操作,通过实例演示如何高效管理和操作数据:

 

Python基础学习第三课:数据结构与文件操作

 

一、课程目标

 

1. 掌握四种核心数据结构:列表(list)、字典(dict)、元组(tuple)、集合(set)

2. 理解数据结构的特性及适用场景

3. 学会文件的读写操作(文本文件处理)

 

二、数据结构详解

 

1. 列表(List):有序、可变的序列

 

- 特点:用方括号

"[]"定义,元素可重复、可修改、按插入顺序存储。

- 常用操作:

# 创建列表

fruits = ["apple", "banana", "orange"]

 

# 访问元素(索引从0开始)

print(fruits[0]) # 输出: apple

 

# 修改元素

fruits[1] = "grape" # 修改后: ["apple", "grape", "orange"]

 

# 添加元素

fruits.append("pear") # 末尾追加: ["apple", "grape", "orange", "pear"]

fruits.insert(1, "kiwi") # 在索引1处插入: ["apple", "kiwi", "grape", "orange", "pear"]

 

# 删除元素

fruits.remove("grape") # 删除首个匹配项

fruits.pop(0) # 删除并返回索引0的元素

fruits.clear() # 清空列表

 

# 遍历列表

for fruit in fruits:

    print(fruit)

- 嵌套列表:列表中的元素也可以是列表(二维数组)。

matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

print(matrix[1][2]) # 输出: 6(第2行第3列)

 

2. 字典(Dict):键值对集合

 

- 特点:用花括号

"{}"定义,通过键(key)快速访问值(value),键必须唯一且不可变(如字符串、数字、元组)。

- 常用操作:

# 创建字典

user = {"name": "Alice", "age": 25, "city": "New York"}

 

# 访问值

print(user["name"]) # 输出: Alice

 

# 修改值

user["age"] = 26 # 更新年龄

 

# 添加键值对

user["job"] = "Engineer" # 新增键"job"

 

# 删除键值对

del user["city"] # 删除键"city"

user.pop("age") # 删除并返回键"age"的值

 

# 遍历字典

for key, value in user.items():

    print(f"{key}: {value}")

- 应用场景:存储用户信息、配置参数、JSON数据解析等。

 

3. 元组(Tuple):有序、不可变的序列

 

- 特点:用圆括号

"()"定义(或直接赋值逗号分隔),元素不可修改,适合存储不应被更改的数据。

- 常用操作:

# 创建元组

coordinates = (10, 20)

 

# 访问元素

print(coordinates[0]) # 输出: 10

 

# 元组解包

x, y = coordinates # x=10, y=20

 

# 遍历元组

for coord in coordinates:

    print(coord)

- 与列表的区别:元组更轻量,适合作为字典的键(因不可变),或保护数据不被意外修改。

 

4. 集合(Set):无序、唯一的元素集合

 

- 特点:用花括号

"{}"定义(注意:空集合需用

"set()"创建,

"{}"表示空字典!),自动去重,支持集合运算(并集、交集等)。

- 常用操作:

# 创建集合

unique_numbers = {1, 2, 3, 3, 2} # 实际存储: {1, 2, 3}

 

# 添加元素

unique_numbers.add(4) # {1, 2, 3, 4}

 

# 删除元素

unique_numbers.remove(2) # 若元素不存在会报错

unique_numbers.discard(5) # 安全删除(元素不存在也不报错)

 

# 集合运算

set1 = {1, 2, 3}

set2 = {3, 4, 5}

print(set1 | set2) # 并集: {1, 2, 3, 4, 5}

print(set1 & set2) # 交集: {3}

print(set1 - set2) # 差集: {1, 2}

- 应用场景:快速去重、成员关系测试(如判断单词是否拼写正确)。

 

三、文件操作:读写文本文件

 

1. 文件读写流程

 

1. 打开文件 → 2. 读写数据 → 3. 关闭文件(避免资源泄漏)。

   - 推荐使用

"with"语句:自动管理文件关闭,无需手动调用

"close()"。

 

2. 示例代码

 

写入文件

 

# 写入文本(覆盖原有内容)

with open("example.txt", "w", encoding="utf-8") as file:

    file.write("Hello, Python!\n")

    file.write("这是第二行。\n")

 

# 追加内容(不覆盖)

with open("example.txt", "a", encoding="utf-8") as file:

    file.write("这是追加的内容。\n")

 

读取文件

 

# 逐行读取

with open("example.txt", "r", encoding="utf-8") as file:

    for line in file:

        print(line.strip()) # strip()去除行尾换行符

 

# 读取全部内容为字符串

with open("example.txt", "r", encoding="utf-8") as file:

    content = file.read()

    print(content)

 

3. 文件模式说明

 

模式 含义

 

""r"" 只读(默认模式)

 

""w"" 写入(覆盖原有内容)

 

""a"" 追加(在文件末尾添加内容)

 

""r+"" 读写(文件指针在开头)

 

""b"" 二进制模式(如

""rb""或

""wb"")

 

四、综合案例:学生成绩管理系统(简化版)

 

结合列表、字典和文件操作,实现成绩的增删改查:

 

def add_student(scores_dict):

    name = input("请输入学生姓名:")

    score = float(input("请输入分数:"))

    scores_dict[name] = score

    print(f"已添加 {name} 的成绩:{score}")

 

def show_scores(scores_dict):

    print("当前成绩单:")

    for name, score in scores_dict.items():

        print(f"{name}: {score}")

 

def save_to_file(scores_dict, filename="scores.txt"):

    with open(filename, "w", encoding="utf-8") as file:

        for name, score in scores_dict.items():

            file.write(f"{name},{score}\n")

    print("成绩已保存到文件!")

 

def load_from_file(filename="scores.txt"):

    scores_dict = {}

    try:

        with open(filename, "r", encoding="utf-8") as file:

            for line in file:

                name, score = line.strip().split(",")

                scores_dict[name] = float(score)

        print("成绩已从文件加载!")

    except FileNotFoundError:

        print("文件不存在,将创建新文件。")

    return scores_dict

 

# 主程序

scores = load_from_file()

while True:

    print("\n学生成绩管理系统")

    print("1. 添加成绩")

    print("2. 查看成绩")

    print("3. 保存到文件")

    print("4. 退出")

    choice = input("请选择操作:")

    

    if choice == "1":

        add_student(scores)

    elif choice == "2":

        show_scores(scores)

    elif choice == "3":

        save_to_file(scores)

    elif choice == "4":

        break

    else:

        print("无效选择,请重试!")

 

五、课后练习

 

1. 基础题:

   - 创建一个列表存储5个学生的姓名,用

"for"循环打印每个姓名。

   - 定义一个字典存储3门课程及其分数(如

"{"数学": 90, "英语": 85}"),计算总分。

2. 进阶题:

   - 用集合去重:输入一个包含重复数字的列表,输出去重后的列表。

   - 修改学生成绩管理系统,支持按姓名查询和删除成绩。

 

六、常见问题解答

 

1. Q:列表和元组有什么区别?什么时候用元组?A:列表可变,适合需要频繁修改的数据;元组不可变,适合存储常量或作为字典的键。

2. Q:字典的键为什么必须是不可变类型?A:因为字典通过哈希表实现,键的哈希值需固定不变,否则无法正确索引。

3. Q:文件操作后忘记关闭会怎样?A:可能导致资源泄漏(文件被占用),用

"with"语句可避免此问题。

 

通过本课,你已掌握Python数据管理的核心技能!下一步将学习函数高级用法和模块化编程,构建更复杂的项目。 💻

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/90417.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/90417.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【PHP 流程控制完全指南】

PHP 流程控制完全指南🧠 一、什么是流程控制? 在编程中,流程控制是指控制程序执行顺序的语句。它决定了代码是“从上往下执行”,还是“根据条件跳转”,或者“循环执行某些代码”。 PHP 中的流程控制语句主要包括&#…

Kafka运维实战 05 - kafka 消费者组和重平衡(Rebalance)

目录什么是消费者组?消费者组如何工作?位移(Offset)消费者组的核心机制:重平衡(Rebalance)触发条件重平衡影响在消息队列(如 Kafka)的世界里,消费者组是实现高…

Mysql-UDF提权

UDF(User Defined Function) 是用户自定义函数,是 MySQL 支持的一种机制,可以通过 C语言写动态链接库(.so / .dll),然后让 MySQL 调用这些函数,调用方式与一般系统自带的函数相同&am…

车规级CANFD芯片在汽车车身控制方案中的应用解析

摘要:随着汽车电子技术的不断发展,汽车车身控制系统对信息传输的效率、可靠性及抗干扰能力等要求日益提高。车规级CANFD芯片作为一种先进的通信芯片,凭借其高速率、高可靠性以及强大的抗干扰能力,成为汽车车身控制系统中的关键组件…

docker desktop 访问 https://registry-1.docker.io/v2/ 报错问题解决

win11 docker desktop 配置国内镜像加速器 1、win11管理员运行powershell notepad "$env:APPDATA\Docker\config.json"2、配置以下内容保存 {"registry-mirrors": ["https://hub-mirror.c.163.com","https://docker.mirrors.ustc.edu.cn&qu…

LLaMA-Factory微调教程1:LLaMA-Factory安装及使用

文章目录 环境搭建 LLaMA-Factory 安装教程 模型大小选择 环境搭建 Windows系统 RTX 4060 Ti(16G显存) python 3.10 cuda=12.6 cudnn torch== 2.7.1+cu126 torchvision==0.22.1+cu126 torchaudio== 2.7.1+cu126 PS C:\Users\18098> nvidia-smi Tue Jul 22 01:52:19 2025 +…

Oracle数据库索引性能机制深度解析:从数据结构到企业实践的系统性知识体系

一、数据检索的根本问题与索引产生的必然性 1.1、数据检索的本质挑战 在理解Oracle索引的性能优势之前,必须回到数据检索的根本问题。当面对海量数据时,传统的线性搜索(Sequential Search)面临着不可调和的性能瓶颈。这种瓶颈源于…

c#面向对象程序设计

一、面向对象与面向过程的核心区别(概念铺垫)代码背景开篇对比了两种编程范式:面向过程(PP):按步骤分解问题(如 “输入长→输入宽→计算面积”);面向对象(OOP…

Kylin V10 4070安装nvidia驱动+CUDA+docker安装

目录 1.系统版本信息 2.安装nvidia驱动 3.CUDA安装 4.docker离线安装 1.系统版本信息 查看一下系统版本,命令为: cat /etc/kylin-release2.安装nvidia驱动 编辑/usr/lib/modprobe.d/dist-blacklist.conf文件 blacklist nvidiafb加#号注释掉 添加…

首家!数巅AskBI通过中国信通院数据分析智能体专项测试

近日,在中国信息通信研究院组织的数据分析智能体(Data Agent)专项测试中,数巅生成式分析智能体AskBI顺利完成专项测试的全部内容。《数据智能体技术要求》标准及测试简介中国信通院云计算与大数据研究所依托中国通信标准化协会大数…

一些Avalonia与WPF内容的对应关系和不同用法

UIElement、FrameworkElement和ControlWPFAvaloniaUIElementControlFrameworkElementControlControlTemplatedControl在 WPF 中,通过继承 Control 类来创建新的模板控件,而在 Avalonia 中,从 TemplatedControl 继承。在 WPF 中,通…

【REACT18.x】CRA+TS+ANTD5.X封装自定义的hooks复用业务功能

模拟react中的hooks方法,实现自定义的hooks来封装我们需要重复使用的组件,来优化代码。这种hooks也是利用了react的原生hooks来实现我们需要的特定业务,可以返回任何我们需要的值,也可以不返回值,作为一个副作用方法使…

Vue CSR 到 Nuxt 3 SSR 迁移:技术实现与问题解决实录

1. 迁移动机与技术选型1.1 CSR 架构的局限性 基于 Vue 3 和 Vite 构建的客户端渲染 (CSR) 单页应用 (SPA) 提供了良好的开发体验和用户交互流畅性。但是其核心局限在于:搜索引擎优化 (SEO):初始 HTML 响应仅包含一个根 div 元素,实际内容由 J…

FastGPT + Kymo:解锁企业专属知识库与智能体开发新体验

在信息爆炸的时代,企业如何让知识“活起来”?传统文档库和搜索框早已无法满足需求。FastGPT——基于RAG技术的开源知识库系统,正重新定义企业级知识管理! 一、FastGPT是什么? FastGPT是企业构建专属知识库的智能核心…

人形机器人_双足行走动力学:Maxwell模型及在拟合肌腱特性中的应用

一、Maxwell模型及其在拟合肌腱特性中的应用Maxwell模型是经典的粘弹性力学模型之一,由弹簧(弹性元件)和阻尼器(粘性元件)串联组成。其在生物力学领域的应用主要聚焦于材料的动态响应(如应力松弛和蠕变&…

「iOS」——KVC

源码学习iOS底层学习:KVC 底层原理一、核心 API 与功能特性**常用方法**KVC 设值 底层原理KVC 取值 底层原理自定义KVC设值取值**特性:无隐私访问****原理**四、多元应用场景1. **动态数据处理**(1)字典转模型(2&#…

【Lucene】leafreadercontext逻辑段与segment物理磁盘段的关系

在 Lucene 中,“叶子段”(LeafReaderContext)和 “segment”(物理段)在 Lucene 语境下,LeafReaderContext ≈ segment 的运行时只读视图。概念 所在层次 含义 是否一一对应 segment 物理存储层 Lucene 索引…

Python进阶第三方库之Matplotlib

应用Matplotlib的基本功能实现图形显示 应用Matplotlib实现多图显示 应用Matplotlib实现不同画图种类 1、什么是Matplotlib是专门用于开发2D图表(包括3D图表) 以渐进、交互式方式实现数据可视化 2、为什么要学习Matplotlib可视化是在整个数据挖掘的关键辅助工具,可以…

【深度解析】从AWS re_Invent 2025看云原生技术发展趋势

2025 年 6 月 28 日 在科技浪潮持续翻涌的当下,云原生技术已然成为推动企业数字化转型与创新发展的关键力量。而 AWS re:Invent 作为云计算领域一年一度的盛会,向来是展示前沿技术、洞察行业趋势的重要舞台。在今年的 AWS re:Invent 2025 大会上&#xf…

高亮标题里的某个关键字正则表达式

使用v-html渲染&#xff0c;写一个高亮方法<span class"title-name" v-html"highlightKeywords(name, keywords)"></span>这里传入的name带了文件拓展名&#xff0c;所以先把名称从文件名里提取出来// 高亮标题颜色highlightKeywords(name, ke…