python数据结构详解

news2024/11/19 23:35:03

Python是一种高级编程语言,它具有简单易学的语法和强大的数据结构。在Python中,数据结构是指一组数据和与之相关的操作的集合。Python提供了许多数据结构,包括列表、元组、字典、集合和字符串。本文将深入介绍Python中的数据结构,希望能够帮助初学者更好地理解和运用它们。

1.列表
列表是Python中最常用的数据结构之一,它可以存储具有不同数据类型的元素。创建一个列表很简单,只需将元素放在方括号[]中,每个元素之间用逗号分隔。例如:

fruits = ['apple', 'banana', 'orange', 'grape']

列表有很多有用的特性,例如可以通过下标访问列表中的元素。在Python中,下标从0开始,例如:

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

还可以使用切片操作来获取列表中的一部分。切片操作的语法为a[start:end],它将返回列表a中从下标start到下标end-1的元素。例如:

print(fruits[1:3])  # 输出 ['banana', 'orange']

此外,列表还具有许多其他的操作,例如添加元素、删除元素、修改元素、查找元素和排序元素等。

2.元组
元组与列表类似,也可以存储不同数据类型的元素,但元组一旦创建就不能修改。元组的语法与列表相似,也是将元素放在小括号()中,每个元素之间用逗号分隔。

fruits = ('apple', 'banana', 'orange', 'grape')

访问元组中的元素也类似于列表,可以使用下标和切片操作。例如:

print(fruits[0])  # 输出 'apple'
print(fruits[1:3])  # 输出 ('banana', 'orange')

元组的不可变性使得它具有一些特殊的用途,例如用作字典的键。此外,元组还可以作为函数的返回值,将多个值打包为一个整体返回。例如:

def square_and_cube(x):
    return x**2, x**3
    
result = square_and_cube(2)
print(result)  # 输出 (4, 8)

3.字典
字典是一种无序的数据结构,它以键值对的形式存储数据。字典的语法是将键和值用冒号:分隔,不同的键值对之间用逗号分隔,整个字典用大括号{}括起来。例如:

person = {'name': 'Tom', 'age': 18, 'gender': 'male'}

访问字典中的元素使用键来进行,例如使用person[‘name’]来访问’name’键对应的值。

字典还有很多实用的方法,例如获取所有键、获取所有值、获取所有键值对、删除元素、修改元素等。

4.集合
集合是一种无序且不重复的数据结构。集合的语法是使用大括号{}括起来,元素之间用逗号分隔。例如:

numbers = {1, 2, 3, 4, 5}

集合支持一些常见的集合操作,例如交集、并集、差集和对称差集等。此外,集合还支持添加元素、删除元素和清空集合等方法。

5.字符串
字符串是一种不可变的序列,它由一系列字符组成。Python中的字符串必须用引号括起来,可以使用单引号或双引号。例如:

s1 = 'hello'
s2 = "world"

字符串支持很多操作,例如切片、拼接、查找、替换等操作。例如,切片操作可以通过下标来获取字符串中的子串,例如:

s = 'abcdefg'
print(s[1:4])  # 输出 'bcd'

此外,字符串还有很多其他的方法,例如获取字符串长度、大小写转换、检查字符串是否包含指定子串等。例如:

s = 'hello world'
print(len(s))  # 输出 11
print(s.upper())  # 输出 'HELLO WORLD'
print('world' in s)  # 输出 True

6.栈
栈是一种具有后进先出(Last In First Out,LIFO)特性的数据结构。常见的栈操作包括压入元素(push)、弹出元素(pop)和获取栈顶元素(top)。Python中可以使用列表来实现栈。例如:

stack = []
stack.append(1)  # 压入元素1
stack.append(2)  # 压入元素2
print(stack.pop())  # 弹出栈顶元素2
print(stack[-1])  # 输出栈顶元素1

7.队列
队列是一种具有先进先出(First In First Out,FIFO)特性的数据结构。队列常见的操作包括入队(enqueue)、出队(dequeue)和获取队首元素(front)。Python中可以使用列表和collections模块中的deque来实现队列。例如:

from collections import deque
queue = deque()
queue.append(1)  # 入队元素1
queue.append(2)  # 入队元素2
print(queue.popleft())  # 出队元素1
print(queue[0])  # 输出队首元素2

8.堆
堆是一种可以快速找到最大或最小元素的数据结构。Python中可以使用heapq模块实现堆。例如:

import heapq
heap = []
heapq.heappush(heap, 3)  # 将3压入堆中
heapq.heappush(heap, 1)  # 将1压入堆中
heapq.heappush(heap, 4)  # 将4压入堆中
print(heapq.heappop(heap))  # 弹出最小元素1
print(heapq.heappop(heap))  # 弹出次小元素3

9.树
树是一种非线性的数据结构,它由节点和边组成,每个节点可以有零个或多个子节点。树有很多重要的概念和性质,包括根节点、叶子节点、深度、高度、父节点、子节点、兄弟节点等。Python中可以使用类和对象来实现树。例如:

class Node:
    def __init__(self, value):
        self.value = value
        self.left = None
        self.right = None

root = Node(1)
root.left = Node(2)
root.right = Node(3)
root.left.left = Node(4)

10.图
图是一种由节点和边组成的复杂数据结构,它与树的区别在于图可以有环和多个连通分量。图有很多重要的概念和性质,包括顶点、边、权重、度、连通性、最短路径、最小生成树等。Python中可以使用字典和类来实现图。例如:

graph = {
    'A': ['B', 'C'],
    'B': ['C', 'D'],
    'C': ['D'],
    'D': ['C'],
    'E': ['F'],
    'F': ['C']
}

在本文中,我们介绍了Python中的常见数据结构,包括列表、元组、字典、集合、字符串、栈、队列、堆、树和图。每种数据结构都有其特殊的用途和实现方式,理解它们的优点和缺点有助于我们在编写代码时选择合适的数据结构。同时,我们还介绍了Python中的一些模块和类,它们提供了一些现成的数据结构实现和算法实现。

学习数据结构和算法是编程中非常重要的一部分,它可以帮助我们写出更高效、更优雅的代码。Python提供了许多方便的数据结构和算法实现,我们可以灵活地选择和使用它们。理解数据结构的优点和缺点可以帮助我们更好地理解它们的工作原理和适用情况,选择合适的数据结构可以帮助我们优化代码的效率和可维护性。

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

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

相关文章

离散数学题目收集整理练习(期末过关进度40%)

✨博主:命运之光 🦄专栏:离散数学考前复习(知识点题) 🍓专栏:概率论期末速成(一套卷) 🐳专栏:数字电路考前复习 ✨博主的其他文章:点击…

ubuntu18.04设置自启动踩坑贴(拿来即用)---全网搜索半天都没有,ChatGPT回答都是有问题的!!

前言:其实很简单,全网的资料实在坑太多(无语),有一篇还不错,我大多数借鉴这篇https://cloud.tencent.com/developer/article/1803805,但直接用貌似也不通,这边记录了我的实测可跑通版…

【AIGC】BaiChuan7B开源大模型介绍、部署以及创建接口服务

模型介绍 baichuan-7B是由百川智能开发的一个开源的大规模预训练模型。基于Transformer结构,在大约1.2万亿tokens上训练的70亿参数模型,支持中英双语,上下文窗口长度为4096。在标准的中文和英文权威benchmark(C-EVAL/MMLU&#x…

游戏革命2023:AIGC拯救游戏厂商

文明史即工具史,纵观人类社会的演化,每一次的加速迭代,都有赖于关键性的技术突破。 前有蒸汽机到电力普及的生产力大爆发,以及计算机、互联网的诞生打开新世界,如今AIGC将再次推动先进技术工具的变革。 随着ChatGPT的…

​​​​​​​微信怎么快捷回复?

怎么快速的回复客户一直问的问题,还在一个个回,我直接把常问问题的回复编辑好,直接一秒搞定回复,客户还以为我敲字速度杠杠的 #快捷回复 #微信怎么快速回复信息 #话术

深入理解Java虚拟机jvm-对象的内存布局

对象的内存布局 对象头(Header)实例数据(Instance Data)对齐填充(Padding) 在HotSpot虚拟机里,对象在堆内存中的存储布局可以划分为三个部分:对象头(Header)、…

简要介绍 | 计算机视觉中的开放词汇:挑战与未来

注1:本文系“简要介绍”系列之一,仅从概念上对计算机视觉中的开放词汇(open vocabulary)进行非常简要的介绍,不适合用于深入和详细的了解。 注2:"简要介绍"系列的所有创作均使用了AIGC工具辅助 计算机视觉中的开放词汇&…

ASP.NET Core MVC 从入门到精通之鉴权授权基础

随着技术的发展,ASP.NET Core MVC也推出了好长时间,经过不断的版本更新迭代,已经越来越完善,本系列文章主要讲解ASP.NET Core MVC开发B/S系统过程中所涉及到的相关内容,适用于初学者,在校毕业生&#xff0c…

在 ZBrush、Substance 3D Painter 和 UE5 中创作警探角色(P2)

大家好,下篇分享咱们继续来说警探角色的重新拓扑、UV、材质贴图和渲染处理。 重新拓扑/UV 这是对我来说最不有趣的部分——重新拓扑。它显然是实时角色中非常重要的一部分,不容忽视,因为它会影响大量的 UV、绑定和后期渲染,这里…

从零开始 Spring Boot 42:异步执行

从零开始 Spring Boot 42:异步执行 图源:简书 (jianshu.com) 在之前的文章中,我多次介绍过在 Spring 中如何使用Async注解让方法调用变成“异步执行”: 在这篇文章中,介绍了如何让定时任务使用Async变成异步执行。在…

​达梦三种主备集群介绍

DM主备守护集群分为实时主备、读写分离集群、MPP主备集群。基于redo日志实现,不同的集群采用不同的redo日志归档类型。 实时主备: 实时主备系统由主库、实时备库、守护进程和监视器组成。通过部署实时主备系统,可以及时检测并处理各种硬件故…

GIS大数据处理框架sedona(塞多纳)编程入门指导

GIS大数据处理框架sedona(塞多纳)编程入门指导 简介 Apache Sedona™是一个用于处理大规模空间数据的集群计算系统。Sedona扩展了现有的集群计算系统,如Apache Spark和Apache Flink,使用一组开箱即用的分布式空间数据集和空间SQL,可以有效地…

【备战秋招】每日一题:2023.05-B卷-华为OD机试 - 2023.05-B卷-华为OD机试 - AI面板识别

2023大厂笔试模拟练习网站(含题解) www.codefun2000.com 最近我们一直在将收集到的各种大厂笔试的解题思路还原成题目并制作数据,挂载到我们的OJ上,供大家学习交流,体会笔试难度。现已录入200道互联网大厂模拟练习题&a…

【双曲几何学 02】什么是极点和极线?

一、说明 Pole and polar 对于几何学,是普遍的概念。可能高中就学过,问题是在双曲几何又用到这个概念,因此,这里再次强调理解这个概念 。为后边学习双曲几何扫清障碍。 二、基本概念 在几何学中,极点和极线分别是相对于…

NetSuite SuiteQlet 功能包

目录 1.前言 2.功能说明 2.1术语 2.2功能概述 2.3逻辑阐释 3.安装 4.权限配置 ​​​5.操作指南 5.1Query查询 5.2Chart图表 5.3Dashboard仪表板发布 6.注意事项 7.视频链接 1.前言 SuiteQL是NetSuite数据分析框架中进行数据查询的有力工具,使用得当则…

华为云CodeArtBuild减负!云端编译构建,让你的开发省时省力!

每一个剑客都需要一把趁手的利器,初学者如何利用编译软件?只需五分钟,带你体验软件开发的效率。 请注册华为云账号并完成实名认证,实验过程中请使用Chrome浏览器完成相关操作。 华为云账号注册步骤请参考: ​​http…

介质中的平面电磁波与色散效应

目录 理想介质中的平面电磁波 方程推导 解的讨论 ​​​​​​​瞬时形式 等相面 参数讨论 导电媒质中的均匀平面波 方程推导 解的讨论 波的特征分析 色散效应的讨论 理想介质中的平面电磁波 方程推导 已知两个方程 我们如果令 方程就可以化简为 这两个方程在数学…

《C++ Primer》--学习1

变量和基本类型 NULL是一个预处理变量,用NULL初始化指针和用0初始化指针是一样的(但是不可以直接用值为0的int变量来初始化),应该尽量用nullptr,避免使用NULL 指向指针的指针 声明符中修饰符的个数并没有限制&#…

redis中sort妙用,实现动态生成排行榜

在游戏中,有很多维度的排行榜,服务器在实现过程中,一般都要预先维护对应因子的zset,比如根据玩家等级来排序,那就需要对应有一个level作为score的zset,如果是以战斗力排序,那就用战力作为score维…

微服务基础介绍

Part1一、基本概念 微服务最主要的功能是根据业务拆分成一个一个的子服务,实现功能的去耦合,每一个微服务提供单个业务功能的服务,各司其职,从技术角度看就是一种灵活独立的单元,能够自行单独启动和关闭,一…