Python的那些事第五篇:数据结构的艺术与应用

 新月人物传记:人物传记之新月篇-CSDN博客


目录

一、列表(List):动态的容器

二、元组(Tuple):不可变的序列

三、字典(Dict):键值对的集合

四、集合(Set):无序的集合

五、数据结构在军事战略中的应用

六、数据结构的艺术:逻辑与效率的结合

七、结语


新月的编程之道:数据结构的艺术与应用

在 25 世纪的星际时代,数据结构是每一位程序员和军事战略家不可或缺的工具。作为一名在编程、人工智能和军事战略领域都取得了卓越成就的女性,我深知数据结构的重要性。数据结构不仅是编程的基础,更是解决复杂问题的关键。在这篇文章中,我将以我的视角,深入探讨 Python 中的四种基本数据结构:列表、元组、字典和集合,并通过具体的示例代码和表格来展示它们的特性和应用。


一、列表(List):动态的容器

(一)创建列表

列表是 Python 中最常用的数据结构之一,它是一种可变的序列,可以存储任意类型的元素。列表的创建非常简单,只需要用方括号 [] 包裹元素即可。

创建方式示例代码输出结果
直接使用方括号my_list = [1, 2, 3, 'a', 'b'][1, 2, 3, 'a', 'b']
使用 list() 函数my_list = list((1, 2, 3, 'a', 'b'))[1, 2, 3, 'a', 'b']
# 创建列表
my_list = [1, 2, 3, 'a', 'b']
print(my_list)  # 输出:[1, 2, 3, 'a', 'b']

(二)索引和切片操作

列表的索引从 0 开始,可以通过索引访问列表中的元素。切片操作则可以获取列表中的一部分元素。

操作示例代码输出结果
索引访问print(my_list[2])3
切片操作print(my_list[1:4])[2, 3, 'a']
负索引print(my_list[-1])'b'
# 索引和切片操作
print(my_list[2])  # 输出:3
print(my_list[1:4])  # 输出:[2, 3, 'a']
print(my_list[-1])  # 输出:'b'

(三)添加元素

列表是可变的,可以通过 append()insert() 方法添加元素。

方法示例代码输出结果
append()my_list.append('c')[1, 2, 3, 'a', 'b', 'c']
insert()my_list.insert(2, 'x')[1, 2, 'x', 3, 'a', 'b', 'c']
# 添加元素
my_list.append('c')
print(my_list)  # 输出:[1, 2, 3, 'a', 'b', 'c']
my_list.insert(2, 'x')
print(my_list)  # 输出:[1, 2, 'x', 3, 'a', 'b', 'c']

(四)删除元素

列表中的元素可以通过 remove()pop() 方法删除。

方法示例代码输出结果
remove()my_list.remove('a')[1, 2, 'x', 3, 'b', 'c']
pop()my_list.pop(2)[1, 2, 3, 'b', 'c']
# 删除元素
my_list.remove('a')
print(my_list)  # 输出:[1, 2, 'x', 3, 'b', 'c']
my_list.pop(2)
print(my_list)  # 输出:[1, 2, 3, 'b', 'c']

(五)列表推导式

列表推导式是一种简洁的方式来创建列表,它可以根据一个表达式生成新的列表。

示例代码输出结果
[x**2 for x in range(10)][0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
[x for x in range(10) if x % 2 == 0][0, 2, 4, 6, 8]
# 列表推导式
squares = [x**2 for x in range(10)]
print(squares)  # 输出:[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
evens = [x for x in range(10) if x % 2 == 0]
print(evens)  # 输出:[0, 2, 4, 6, 8]

(六)排序

列表可以通过 sort() 方法原地排序,也可以通过 sorted() 函数返回一个新的排序后的列表。

方法示例代码输出结果
sort()my_list = [3, 1, 2]; my_list.sort()[1, 2, 3]
sorted()my_list = [3, 1, 2]; sorted_list = sorted(my_list)[1, 2, 3]
# 排序
my_list = [3, 1, 2]
my_list.sort()
print(my_list)  # 输出:[1, 2, 3]my_list = [3, 1, 2]
sorted_list = sorted(my_list)
print(sorted_list)  # 输出:[1, 2, 3]

二、元组(Tuple):不可变的序列

(一)创建元组

元组是一种不可变的序列,一旦创建就不能修改。元组的创建方式与列表类似,但使用圆括号 ()

创建方式示例代码输出结果
直接使用圆括号my_tuple = (1, 2, 3, 'a', 'b')(1, 2, 3, 'a', 'b')
使用 tuple() 函数my_tuple = tuple([1, 2, 3, 'a', 'b'])(1, 2, 3, 'a', 'b')
# 创建元组
my_tuple = (1, 2, 3, 'a', 'b')
print(my_tuple)  # 输出:(1, 2, 3, 'a', 'b')

(二)索引和切片操作

元组的索引和切片操作与列表类似,但由于元组不可变,因此不能修改其中的元素。

操作示例代码输出结果
索引访问print(my_tuple[2])3
切片操作print(my_tuple[1:4])(2, 3, 'a')
# 索引和切片操作
print(my_tuple[2])  # 输出:3
print(my_tuple[1:4])  # 输出:(2, 3, 'a')

(三)不可变性

元组的不可变性使其在某些场景下非常有用,例如作为字典的键或存储不可变数据。

# 不可变性
try:my_tuple[2] = 'x'
except TypeError as e:print(e)  # 输出:'tuple' object does not support item assignment

三、字典(Dict):键值对的集合

(一)创建字典

字典是一种键值对的集合,键必须是不可变类型,而值可以是任意类型。字典的创建方式有多种。

创建方式示例代码输出结果
直接使用大括号my_dict = {'a': 1, 'b': 2, 'c': 3}{'a': 1, 'b': 2, 'c': 3}
使用 dict() 函数my_dict = dict([('a', 1), ('b', 2), ('c', 3)]){'a': 1, 'b': 2, 'c': 3}
# 创建字典
my_dict = {'a': 1, 'b': 2, 'c': 3}
print(my_dict)  # 输出:{'a': 1, 'b': 2, 'c': 3}

(二)键值对操作

字典可以通过键访问、添加、删除和修改值。

操作示例代码输出结果
访问值print(my_dict['a'])1
添加键值对my_dict['d'] = 4{'a': 1, 'b': 2, 'c': 3, 'd': 4}
删除键值对del my_dict['b']{'a': 1, 'c': 3, 'd': 4}
修改值my_dict['a'] = 10{'a': 10, 'c': 3, 'd': 4}
# 键值对操作
print(my_dict['a'])  # 输出:1
my_dict['d'] = 4
print(my_dict)  # 输出:{'a': 1, 'b': 2, 'c': 3, 'd': 4}
del my_dict['b']
print(my_dict)  # 输出:{'a': 1, 'c': 3, 'd': 4}
my_dict['a'] = 10
print(my_dict)  # 输出:{'a': 10, 'c': 3, 'd': 4}

(三)遍历字典

字典可以通过 keys()values()items() 方法进行遍历。

方法示例代码输出结果
keys()for key in my_dict.keys(): print(key)a c d
values()for value in my_dict.values(): print(value)10 3 4
items()for key, value in my_dict.items(): print(key, value)a 10 c 3 d 4
# 遍历字典
for key in my_dict.keys():print(key)  # 输出:a c d
for value in my_dict.values():print(value)  # 输出:10 3 4
for key, value in my_dict.items():print(key, value)  # 输出:a 10 c 3 d 4

四、集合(Set):无序的集合

(一)创建集合

集合是一种无序的集合,其中的元素是唯一的。集合的创建方式有多种。

创建方式示例代码输出结果
直接使用大括号my_set = {1, 2, 3, 'a', 'b'}{1, 2, 3, 'a', 'b'}
使用 set() 函数my_set = set([1, 2, 3, 'a', 'b']){1, 2, 3, 'a', 'b'}
# 创建集合
my_set = {1, 2, 3, 'a', 'b'}
print(my_set)  # 输出:{1, 2, 3, 'a', 'b'}

(二)添加元素

集合可以通过 add() 方法添加元素。

方法示例代码输出结果
add()my_set.add('c'){1, 2, 3, 'a', 'b', 'c'}
# 添加元素
my_set.add('c')
print(my_set)  # 输出:{1, 2, 3, 'a', 'b', 'c'}

(三)删除元素

集合中的元素可以通过 remove()discard() 方法删除。

方法示例代码输出结果
remove()my_set.remove('a'){1, 2, 3, 'b', 'c'}
discard()my_set.discard('b'){1, 2, 3, 'c'}
# 删除元素
my_set.remove('a')
print(my_set)  # 输出:{1, 2, 3, 'b', 'c'}
my_set.discard('b')
print(my_set)  # 输出:{1, 2, 3, 'c'}

(四)集合运算

集合支持并集、交集和差集运算。

运算示例代码输出结果
并集`set1 = {1, 2, 3}; set2 = {3, 4, 5}; print(set1set2)`{1, 2, 3, 4, 5}
交集set1 = {1, 2, 3}; set2 = {3, 4, 5}; print(set1 & set2){3}
差集set1 = {1, 2, 3}; set2 = {3, 4, 5}; print(set1 - set2){1, 2}
# 集合运算
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}

五、数据结构在军事战略中的应用

作为一名军事战略家,我深知数据结构在实际应用中的重要性。在星际战争中,数据结构可以帮助我们高效地管理和分析情报,优化战术部署,甚至预测敌人的行动。

(一)列表的应用

在军事行动中,列表可以用来存储和管理任务列表、士兵名单或装备清单。例如,我们可以使用列表来存储任务的优先级和状态。

# 任务列表
tasks = [{"name": "侦察敌方基地", "priority": 1, "status": "未完成"},{"name": "部署防御系统", "priority": 2, "status": "进行中"},{"name": "攻击敌方补给线", "priority": 3, "status": "已完成"}
]# 添加任务
tasks.append({"name": "支援友军", "priority": 4, "status": "未完成"})# 删除任务
tasks.pop(2)# 排序任务
tasks.sort(key=lambda x: x["priority"])
print(tasks)

(二)元组的应用

元组的不可变性使其非常适合存储固定的数据,例如坐标点、武器参数或士兵的身份信息。在星际战争中,我们可以使用元组来存储星球的坐标。

# 星球坐标
planet_coordinates = (123.45, 678.90, 345.67)# 访问坐标
print(f"X: {planet_coordinates[0]}, Y: {planet_coordinates[1]}, Z: {planet_coordinates[2]}")

(三)字典的应用

字典的键值对结构非常适合存储和查询复杂的数据,例如敌方单位的属性、资源分布或战术计划。在军事行动中,我们可以使用字典来存储敌方单位的信息。

# 敌方单位信息
enemy_units = {"坦克": {"health": 1000, "armor": 500, "damage": 200},"战斗机": {"health": 500, "armor": 200, "damage": 150},"步兵": {"health": 100, "armor": 50, "damage": 50}
}# 查询坦克的属性
print(enemy_units["坦克"])

(四)集合的应用

集合的唯一性和无序性使其非常适合处理去重和集合运算。在军事行动中,我们可以使用集合来管理友军和敌军的单位,以便快速进行交集、并集和差集运算。

# 友军单位
friendly_units = {"坦克", "战斗机", "步兵"}# 敌军单位
enemy_units = {"坦克", "战斗机", "战舰"}# 交集(双方都有的单位)
print(friendly_units & enemy_units)  # 输出:{'坦克', '战斗机'}# 并集(双方所有单位)
print(friendly_units | enemy_units)  # 输出:{'坦克', '战斗机', '步兵', '战舰'}# 差集(友军独有的单位)
print(friendly_units - enemy_units)  # 输出:{'步兵'}

六、数据结构的艺术:逻辑与效率的结合

作为一名程序员,我认为数据结构不仅是一种技术,更是一种艺术。它能够将复杂的逻辑简化为优雅的代码,同时提高系统的效率和可维护性。在编程中,选择合适的数据结构是解决问题的关键。

(一)列表与元组的选择

列表和元组在功能上有一定的重叠,但在实际应用中,它们各有优势。列表是可变的,适合存储动态变化的数据;元组是不可变的,适合存储固定的数据。在选择时,我们需要根据具体需求来决定使用哪种数据结构。

(二)字典与集合的选择

字典和集合都基于哈希表实现,具有高效的查找性能。字典适合存储键值对数据,而集合适合存储唯一的数据。在实际应用中,我们可以根据数据的特点和操作需求来选择合适的数据结构。

(三)数据结构的组合使用

在复杂的系统中,我们常常需要组合使用多种数据结构。例如,我们可以使用字典来存储任务的详细信息,同时使用列表来管理任务的顺序。

# 任务管理
tasks = [{"name": "侦察敌方基地", "priority": 1, "status": "未完成"},{"name": "部署防御系统", "priority": 2, "status": "进行中"},{"name": "攻击敌方补给线", "priority": 3, "status": "已完成"}
]# 任务字典
task_dict = {task["name"]: task for task in tasks}# 查询任务
print(task_dict["侦察敌方基地"])

七、结语

数据结构是编程的基础,也是解决复杂问题的关键。在 25 世纪的星际时代,数据结构在军事战略中的应用尤为重要。通过合理选择和组合使用数据结构,我们可以提高系统的效率和可维护性,为未来的星际战争做好准备。


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

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

相关文章

【AI】DeepSeek 概念/影响/使用/部署

在大年三十那天,不知道你是否留意到,“deepseek”这个词出现在了各大热搜榜单上。这引起了我的关注,出于学习的兴趣,我深入研究了一番,才有了这篇文章的诞生。 概念 那么,什么是DeepSeek?首先百…

MapReduce简单应用(一)——WordCount

目录 1. 执行过程1.1 分割1.2 Map1.3 Combine1.4 Reduce 2. 代码和结果2.1 pom.xml中依赖配置2.2 工具类util2.3 WordCount2.4 结果 参考 1. 执行过程 假设WordCount的两个输入文本text1.txt和text2.txt如下。 Hello World Bye WorldHello Hadoop Bye Hadoop1.1 分割 将每个文…

Dest1ny漏洞库:用友 U8 Cloud ReleaseRepMngAction SQL 注入漏洞(CNVD-2024-33023)

大家好,今天是Dest1ny漏洞库的专题!! 会时不时发送新的漏洞资讯!! 大家多多关注,多多点赞!!! 0x01 产品简介 用友U8 Cloud是用友推出的新一代云ERP,主要聚…

使用where子句筛选记录

默认情况下,SearchCursor将返回一个表或要素类的所有行.然而在很多情况下,常常需要某些条件来限制返回行数. 操作方法: 1.打开IDLE,加载先前编写的SearchCursor.py脚本 2.添加where子句,更新SearchCursor()函数,查找记录中有<>文本的<>字段 with arcpy.da.Searc…

使用国内镜像加速器解决 Docker Hub 拉取镜像慢或被屏蔽的问题

一、问题背景 Docker Hub 是 Docker 默认的镜像仓库&#xff0c;但由于网络限制&#xff0c;国内用户直接拉取镜像可能面临以下问题&#xff1a; 下载速度极慢&#xff08;尤其是大镜像&#xff09;。连接超时或完全被屏蔽&#xff08;部分网络环境&#xff09;。依赖国外源的…

AI大模型开发原理篇-4:神经概率语言模型NPLM

神经概率语言模型&#xff08;NPLM&#xff09;概述 神经概率语言模型&#xff08;Neural Probabilistic Language Model, NPLM&#xff09; 是一种基于神经网络的语言建模方法&#xff0c;它将传统的语言模型和神经网络结合在一起&#xff0c;能够更好地捕捉语言中的复杂规律…

2.1.2 Bayer阵列与去马赛克

文章目录 Bayer阵列去马赛克方法 Bayer阵列 由于传感器只能感受到光的强度&#xff0c;而无法感知颜色&#xff0c;所以需要用红、绿、蓝颜色的滤光片将光中的R、G、B亮度滤出&#xff0c;再通过R、G、B的组合得到各种色彩。Bayer阵列是使用一个传感器获得彩色图像的方法&#…

红黑树的学习

红黑树的概念 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储位表示结点的颜色&#xff0c;可以是Red或 Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制&#xff0c;红黑树确保没有一条路径会比其他路径长出俩倍&#xff0c;因…

2025年01月31日Github流行趋势

项目名称&#xff1a;Qwen2.5项目地址url&#xff1a;https://github.com/QwenLM/Qwen2.5项目语言&#xff1a;Shell历史star数&#xff1a;13199今日star数&#xff1a;459项目维护者&#xff1a;jklj077, JustinLin610, bug-orz, huybery, JianxinMa项目简介&#xff1a;Qwen…

Java基础面试题总结(题目来源JavaGuide)

问题1&#xff1a;Java 中有哪 8 种基本数据类型&#xff1f;它们的默认值和占用的空间大小知道不&#xff1f; 说说这 8 种基本数据类型对 应的包装类型。 在 Java 中&#xff0c;有 8 种基本数据类型&#xff08;Primitive Types&#xff09;&#xff1a; 基本数据类型关键…

人工智能|基本概念|人工智能相关重要概念---AI定义以及模型相关知识

一、 前言&#xff1a; 最近deepseek&#xff08;深度求索&#xff09;公司的开源自然语言处理模型非常火爆。 本人很早就对人工智能比较感兴趣&#xff0c;但由于种种原因没有过多的深入此领域&#xff0c;仅仅是做了一点初步的了解&#xff0c;借着这个deepseek&#xff0…

Python GIL(全局解释器锁)机制对多线程性能影响的深度分析

在Python开发领域&#xff0c;GIL&#xff08;Global Interpreter Lock&#xff09;一直是一个广受关注的技术话题。在3.13已经默认将GIL去除&#xff0c;在详细介绍3.13的更亲前&#xff0c;我们先要留了解GIL的技术本质、其对Python程序性能的影响。本文将主要基于CPython&am…

从0开始使用面对对象C语言搭建一个基于OLED的图形显示框架(绘图设备封装)

目录 图像层的底层抽象——绘图设备抽象 如何抽象一个绘图设备&#xff1f; 桥接绘图设备&#xff0c;特化为OLED设备 题外话&#xff1a;设备的属性&#xff0c;与设计一个相似函数化简的通用办法 使用函数指针来操作设备 总结一下 图像层的底层抽象——绘图设备抽象 在…

Git 版本控制:基础介绍与常用操作

目录 Git 的基本概念 Git 安装与配置 Git 常用命令与操作 1. 初始化本地仓库 2. 版本控制工作流程 3. 分支管理 4. 解决冲突 5. 回退和撤销 6. 查看提交日志 前言 在软件开发过程中&#xff0c;开发者常常需要在现有程序的基础上进行修改和扩展。但如果不加以管理&am…

(笔记+作业)书生大模型实战营春节卷王班---L0G2000 Python 基础知识

学员闯关手册&#xff1a;https://aicarrier.feishu.cn/wiki/QtJnweAW1iFl8LkoMKGcsUS9nld 课程视频&#xff1a;https://www.bilibili.com/video/BV13U1VYmEUr/ 课程文档&#xff1a;https://github.com/InternLM/Tutorial/tree/camp4/docs/L0/Python 关卡作业&#xff1a;htt…

仿真设计|基于51单片机的高速路口货车称重系统仿真

目录 具体实现功能 设计介绍 51单片机简介 资料内容 仿真实现&#xff08;protues8.7&#xff09; 程序&#xff08;Keil5&#xff09; 全部内容 资料获取 具体实现功能 &#xff08;1&#xff09;LCD1602液晶第一行显示当前的车辆重量&#xff0c;第二行显示车辆重量…

Ubuntu Server 安装 XFCE4桌面

Ubuntu Server没有桌面环境&#xff0c;一些软件有桌面环境使用起来才更加方便&#xff0c;所以我尝试安装桌面环境。常用的桌面环境有&#xff1a;GNOME、KDE Plasma、XFCE4等。这里我选择安装XFCE4桌面环境&#xff0c;主要因为它是一个极轻量级的桌面环境&#xff0c;适合内…

2025:影刀RPA使用新实践--CSDN博客下载

文章目录 一键CSDN博客下载器程序说明指导说明使用步骤 获取方法 一键CSDN博客下载器 程序说明 配置信息&#xff1a;CSDN账号&#xff08;手机号/邮箱/用户名&#xff09;、密码、博客文件类型支持markdown格式、html格式&#xff08;默认值markdown格式&#xff09;、博客保…

深度学习的应用

目录 一、机器视觉 1.1 应用场景 1.2 常见的计算机视觉任务 1.2.1 图像分类 1.2.2 目标检测 1.2.3 图像分割 二、自然语言处理 三、推荐系统 3.1 常用的推荐系统算法实现方案 四、图像分类实验补充 4.1 CIFAR-100 数据集实验 实验代码 4.2 CIFAR-10 实验代码 深…

前端js高级25.1.30

原型&#xff1a;函数的组成结构 通过这个图我们需要知道。 假设我们创建了一个Foo函数。 规则&#xff1a;Function.protoType是函数显示原型。__proto__是隐式对象。 Function、Object、Foo函数的__proto__指向了Function.protoType说明。这三个都依托function函数来创建。…