从入门到实战之数据结构篇更新的时间是, 二零二一年十一月四号, 十五时十二分五十六秒, 作者是嗨程序媛。那众多存在于数据结构里的树的结构, 其中涵盖着二叉树, 还有二叉搜索树, 以及2 - 3树, 另外还有红黑树等。在本文当中针对数据结构做出了总结, 并非追求严格精准, 只是力求简单易懂。前言我是栗子——专为小白准备《从入门到实战》内容。这并非上一期才讲完的循环判断, 还给大伙提供了不少面向新手的题目, 于学习进程里边开展练习才会生效有成果。经历了几天的间隔之后, 在座的诸位都已经尽情宣泄完了~确实存在尚未完成书写的情况, 那就逐步去进行复习, 毕竟我更新文章的速度也是较为迟缓的哈哈哈。今天想一想要学数据结构啦~一、有那几种数据结构存在四种数据结构, 它们分别是列表, 字典, 元组以及集合。每一种数据结构都具备自身的特点, 而且都秉持着独到的用处。为了防止过早地深陷于细枝末节之中。我们先来从整体上认识一下这四种数据结构, 从最容易识别的特征来讲, 列表里的元素是用方括号括起来的, 字典和集合使用花括号, 元组用的是圆括号, 其中字典里的元素是都带有‘: 的key与value的对应关系组。1)列表list)1.1 什么是列表最显著的特征是列表当中的元素具备可变的特性, 这所表达的意思是, 我们能够于列表里进行添加元素的操作, 能够实施删除元素的行为, 还能够开展修改元素的举动。输入Weekday [Monday,Tuesday,Wednesday,Thursday,Friday] print(Weekday[0])第三个特征是列表可以装入 中所有的对象往下看all_in_list [ 1, #整数 1.0, #浮点数 a word, #字符串 print(1), #函数 True, #布尔值 [1,2], #列表中套列表 (1,2), #元组 {key:value} #字典 ]1.2列表的增删改查围绕数据展开的操作之中, 最为常见的存在着的是增添、删弃、改动和查证这四类。起始于列表的插入方式着手, 进行输入:fruit [pineapple,pear] fruit.insert(1,grape) print(fruit)在运用方法之际, 需规定于列表里要置入新元素的地方, 所插入元素的实际地方是在指定地方元素之前的地方, 要是指定插入的地方在列表内不存在, 实际上也就是超越指定列表长度, 那么此元素必定会置于列表的最后地方。fruit[0:0] [Orange] print(fruit)fruit [pinapple,pear,grape] fruit.remove(grape) print(fruit)fruit[0] Grapefruitdel fruit[0:2] print(fruit)2字典)2.1 什么是字典字典这般数据结构的特性恰似现实世界里的字典那般, 运用名称内容去开展数据的搭建, 于其中分别相应着键key值value, 通常把它称作键值对。字典的特征总结如下举个小栗子这是字典的书写方式 NASDAQ_code { BIDU:Baidu, SINA:Sina, YOKU:Youku }在一个字典里, 键和值是没办法脱离彼此单独存在的, 要是你写成 {BIDU:} 这种形式, 就会导致语法出现错误。记住这两个特征, 其中, key和value是一一对应的情况, 另外, key是不可变的。与此同时, 字典里的键值不会存在重复的情况, 就算你这样去做, 相同的键值也仅仅能够出现一回:a {key:123,key:123} print(a)2.2 字典的增删改查首先我们按照映射关系创建一个字典NASDAQ_code {BIDU:Baidu,SINA:Sina}和列表不一样的地方在于, 字典不存在着可往内部添加单个元素的“办法”, 然而我们能借由这样的形式来添加:NASDAQ_code[YOKU] Youku print(NASDAQ_code用作添加多个元素的方法 () 存在于列表之中 , 相应的添加多个元素的方法 () 于字典里同样是有的:NASDAQ_code.update({FB:Facebook,TSLA:Tesla})删除字典中的元素则使用 del 方法del NASDAQ_code[FB]需要留意的是, 尽管字典运用的是花括号, 然而在索引内容之际, 依旧运用的是如同列表那般的方括号来进行索引, 只是在括号里放置的必定是——字典当中的键, 这意味着要借助键来索引值:NASDAQ_code[TSLA]与此同时, 字典并不具备能够进行切片操作的特性, 换句话讲, 诸如下面这样所呈现的写法, 要是应用于字典之上的话, 那便是错误的:chart[1:4] # WRONG!3元组Tuple)元组, 实际上能够被视作一个有着稳定性的列表版本, 鉴于元组是不可以进行修改的, 所以在列表里所拥有的那些方法, 全都不可以运用在元组之上, 然而元组是能够被用来查看索引的, 其方式跟列表是一样的:letters (a,b,c,d,e,f,g) letter[0]4)集合Set)4.1什么是集合组成集合的一个个元素, 是没有顺序、不会重复的随便对象我们能够借助集合来判定数据的从属关联有时候还能够利用集合将数据结构里重复的元素去除掉。不可以对集合进行切片操作, 不可以对集合进行索引操作, 除了用于集合运算之外, 能够对集合元素进行添加动作, 能够对集合元素进行删除动作。a_set {1,2,3,4} a_set.add(5) a_set.discard(5)5番外——数据结构的一些技巧5.1多重循环举个例子, 比如说, 当着手整理表格也好或者文件之时, 会依据字母去排序或者按照日期来排序进而开展相关整理, 在其中同样是有着类似这般效果或者存在同等性质作用的功能情形在的。num_list [6,2,7,4,1,3,5] print(sorted(num_list))存在一个函数, 它会依据长短、大小以及英文字母的顺序, 针对每个列表里的元素予以排序, 这个函数在数据展示当中会经常被使用到。其中存在一个极为关键的要点, 此函数不会对列表自身进行改变, 你能够把它理解为先把列表予以复制, 紧接着再开展顺序的整理。在使用默认参数 后列表可以被按照逆序整理sorted(num_list,reverseTrue)当处于整理列表这个进程里时, 要是同时对两个列表均有需求那么该如何去做呢? 在这个时候就能够运用到zip函数例如:for a,b in zip(num,str): print(b,is,a)5.2推导式数据结构里存在推导式, 或许你曾见识过它另外一种称谓是列表的解析式。现在我有10个元素要装进列表中普通的写法是这样的a [] for i in range(1,11): a.append(i)下面换成列表解析的方式来写b [i for i in range(1,11)]将两种不同的列表操作方式所耗费的时间予以对比, 便会很容易瞧见其效率存在的巨大差异, 其中列表解析式不但相当便利, 而且在执行效率方面相比原先的那一种要远远胜出。import time a [] t0 time.clock() for i in range(1,20000): a.append(i) print(time.clock() - t0, seconds process time) t0 time.clock() b [i for i in range(1,20000)] print(time.clock() - t0, seconds process time)得到结果8.-06 time0. time要理解列表推导式的用法也并不困难, 能简便地将其看作是两个部分。红色虚线往后的部分, 是我们所熟知的for循环所用的那种表达式。而虚线往前的部分, 能够当作是我们期望放置在列表里的元素。在这个实例当中, 放置在列表里的元素就是后面循环的元素自身。5.3循环列表时获取元素的索引现今, 我们存有一个字母表, 怎样才可以好似图里那般, 于索引之际获取每个元素确切位置的呈现呢?letters [a, b, c, d, e, f, g]a is 1 b is 2 c is 3 d is 4 e is 5 f is 6 g is 7前面曾经提及过, 列表是具备顺序性的, 处于这种情形的时候, 我们能够运用其中特地存在的函数来予以开展:letters [a, b, c, d, e, f, g] for num,letter in enumerate(letters): print(letter,is,num 1)结尾你学会了吗, 等着过几天你学会了, 记着评论吭一声, 那个时候我再去更新哟, 呵呵呵。快来跟我一起学习吧关注小编每天更新精彩内容哦~这篇有关从入门迈向实战的数据结构篇的文章, 到此就介绍到这儿了, 更多与其相关的数据结构内容, 要搜寻主页先前的文章, 或者接着浏览下面相关之文章, 期望大家往后多多支持本作者