• Python数据结构基础教学,从零基础小白到实战大佬!



    前言

    数据结构中有很多树的结构,其中包括二叉树、二叉搜索树、2-3树、红黑树等等。本文中对数据结构进行了总结,不求严格精准,但求简单易懂

    Python有那几种数据结构?

    Python 有四种数据结构,分别是:列表、字典、元组,集合。每种数据结构都有自己的特点,并且都有着独到的用处。为了避免过早地陷入细枝末节。

    我们先从整体上来认识一下这四种数据结构:从最容易识别的特征上来说,列表中的元素使用方括号扩起来,字典和集合是花括号,而元组则是圆括号。其中字典中的元素是均带有 ‘:' 的 key 与 value 的对应关系组。

    1)列表(list)

    1.1 什么是列表?

    最显著的特征是:

    • 列表中的每一个元素都是可变的;
    • 列表中的元素是有序的,也就是说每一个元素都有一个位置;
    • 列表可以容纳 Python 中的任何对象。

    列表中的元素是可变的,这意味着我们可以在列表中添加、删除和修改元素。

    输入:

    Weekday = \['Monday','Tuesday','Wednesday','Thursday','Friday'\]
    print(Weekday\[0\])
    
    • 1
    • 2

    第三个特征是列表可以装入 Python 中所有的对象,往下看:

    all\_in\_list = \[
        1,                              #整数
        1.0,                            #浮点数
        'a word',                       #字符串
        print(1),                       #函数
        True,                           #布尔值
        \[1,2\],                          #列表中套列表
        (1,2),                          #元组
        {'key':'value'}                 #字典
    \]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    1.2列表的增删改查

    对于数据的操作,最常见的是增删改查这四类。从列表的插入方法开始,输入:

    fruit = \['pineapple','pear'\]
    fruit.insert(1,'grape')
    print(fruit)
    
    • 1
    • 2
    • 3

    在使用 insert 方法的时候,必须指定在列表中要插入新的元素的位置,插入元素的实际位置是在指定位置元素之前的位置,如果指定插入的位置在列表中不存在,实际上也就是超出指定列表长度,那么这个元素一定会被放在列表的最后位置。

    • 其他方法达到“插入”的效果:
    fruit\[0:0\] = \['Orange'\]
    print(fruit)
    
    • 1
    • 2
    • 删除列表中元素的方法是使用 remove():
    fruit = \['pinapple','pear','grape'\]
    fruit.remove('grape')
    print(fruit)
    
    • 1
    • 2
    • 3
    • 替换修改其中的元素:
    fruit\[0\] = 'Grapefruit'
    
    • 1
    • 删除还有一种方法,那就是使用 del 关键字来声明:
    del fruit\[0:2\]
    print(fruit)
    
    • 1
    • 2

    2)字典(Dictionary)

    2.1 什么是字典?

    字典这种数据结构的特征也正如现实世界中的字典一样,使用名称-内容进行数据的构建,在 Python 中分别对应着键(key)-值(value),习惯上称之为键值对。

    字典的特征总结如下:

    • 字典中数据必须是以键值对的形式出现的;
    • 逻辑上讲,键是不能重复的,而值可以重复;
    • 字典中的键(key)是不可变的,也就是无法修改的;而值(value)是可变的,可修改的,可以是任何对象。

    举个小栗子:

    这是字典的书写方式:
     
    NASDAQ\_code = {
        'BIDU':'Baidu',
        'SINA':'Sina',
        'YOKU':'Youku'
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    一个字典中键与值并不能脱离对方而存在,如果你写成 {'BIDU':} 会引发语法错误。

    记住这两个特征: key 和 value 是一一对应的,key 是不可变的。

    同时字典中的键值不会有重复,即便你这么做,相同的键值也只能出现一次:

    a = {'key':123,'key':123}
    print(a)
    
    • 1
    • 2
    2.2 字典的增删改查

    首先我们按照映射关系创建一个字典:

    NASDAQ\_code = {'BIDU':'Baidu','SINA':'Sina'}
    
    • 1

    与列表不同的是,字典并没有一个可以往里面添加单一元素的“方法”,但是我们可以通过这种方式进行添加:

    NASDAQ\_code\['YOKU'\] = 'Youku'
    print(NASDAQ\_code)
    
    • 1
    • 2

    列表中有用来添加多个元素的方法 extend() ,在字典中也有对应的添加多个元素的方法 update()

    NASDAQ\_code.update({'FB':'Facebook','TSLA':'Tesla'})
    
    • 1

    删除字典中的元素则使用 del 方法:

    del NASDAQ\_code\['FB'\]
    
    • 1

    需要注意的是,虽说字典是使用的花括号,在索引内容的时候仍旧使用的是和列表一样的方括号进行索引,只不过在括号中放入的一定是——字典中的键,也就是说需要通过键来索引值:

    NASDAQ\_code\['TSLA'\]
    
    • 1

    同时,字典是不能够切片的,也就是说下面这样的写法应用在字典上是错误的:

    chart\[1:4\]  # WRONG!
    
    • 1

    3)元组(Tuple)

    元组其实可以理解成一个稳固版的列表,因为元组是不可修改的,因此在列表中的存在的方法均不可以使用在元组上,但是元组是可以被查看索引的,方式就和列表一样:

    letters = ('a','b','c','d','e','f','g')
    letter\[0\]
    
    • 1
    • 2

    4)集合(Set)

    4.1什么是集合?

    每一个集合中的元素是无序的、不重复的任意对象,我们可以通过集合去判断数据的从属关系,有时还可以通过集合把数据结构中重复的元素减掉。

    集合不能被切片也不能被索引,除了做集合运算之外,集合元素可以被添加还有删除:

    a\_set = {1,2,3,4}                                              
    a\_set.add(5)
    a\_set.discard(5)
    
    • 1
    • 2
    • 3

    5)番外——数据结构的一些技巧

    5.1多重循环

    举个栗子:比如,在整理表格或者文件的时候会按照字母或者日期进行排序,在 Python 中也存在类似的功能。

    num\_list = \[6,2,7,4,1,3,5\]
    print(sorted(num\_list))
    
    • 1
    • 2

    sorted 函数按照长短、大小、英文字母的顺序给每个列表中的元素进行排序。这个函数会经常在数据的展示中使用,其中有一个非常重要的地方,sorted 函数并不会改变列表本身,你可以把它理解成是先将列表进行复制,然后再进行顺序的整理。

    在使用默认参数 reverse 后列表可以被按照逆序整理:

    sorted(num\_list,reverse=True)
    
    • 1

    在整理列表的过程中,如果同时需要两个列表应该怎么办?这时候就可以用到 zip 函数,比如:

    for a,b in zip(num,str):
        print(b,'is',a)
    
    • 1
    • 2

    5.2推导式

    数据结构中的推导式,也许你还看到过它的另一种名称叫做列表的解析式。

    现在我有10个元素要装进列表中,普通的写法是这样的:

    a = \[\]
    for i in range(1,11):
        a.append(i)
    
    • 1
    • 2
    • 3

    下面换成列表解析的方式来写:

    b = \[i for i in range(1,11)\]
    
    • 1

    列表解析式不仅非常方便,并且在执行效率上要远远胜过前者,我们把两种不同的列表操作方式所耗费的时间进行对比,就不难发现其效率的巨大差异:

    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")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    得到结果:

    8.999999999998592e-06 seconds process time
    0.0012320000000000005 seconds process time

    列表推导式的用法也很好理解,可以简单地看成两部分。红色虚线后面的是我们熟悉的 for 循环的表达式,而虚线前面的可以认为是我们想要放在列表中的元素,在这个例子中放在列表中的元素即是后面循环的元素本身。

    5.3循环列表时获取元素的索引

    现在我们有一个字母表,如何能像图中一样,在索引的时候得到每个元素的具体位置的展示呢?

    letters = \['a', 'b', 'c', 'd', 'e', 'f', 'g'\]
    
    • 1
    a is 1
    b is 2
    c is 3
    d is 4
    e is 5
    f is 6 
    g is 7
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    前面提到过,列表是有序的,这时候我们可以使用 Python 中独有的函数 enumerate 来进行:

    letters = \['a', 'b', 'c', 'd', 'e', 'f', 'g'\]
    for num,letter in enumerate(letters):
        print(letter,'is',num + 1)
    
    • 1
    • 2
    • 3

    关于Python技术储备

    学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

    👉CSDN大礼包:《Python入门资料&实战源码&安装工具】免费领取安全链接,放心点击

    一、Python所有方向的学习路线

    Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
    在这里插入图片描述

    二、Python基础学习视频

    ② 路线对应学习视频

    还有很多适合0基础入门的学习视频,有了这些视频,轻轻松松上手Python~在这里插入图片描述
    在这里插入图片描述

    ③练习题

    每节视频课后,都有对应的练习题哦,可以检验学习成果哈哈!
    在这里插入图片描述
    因篇幅有限,仅展示部分资料

    三、精品Python学习书籍

    当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
    在这里插入图片描述

    四、Python工具包+项目源码合集
    ①Python工具包

    学习Python常用的开发软件都在这里了!每个都有详细的安装教程,保证你可以安装成功哦!
    在这里插入图片描述

    ②Python实战案例

    光学理论是没用的,要学会跟着一起敲代码,动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。100+实战案例源码等你来拿!
    在这里插入图片描述

    ③Python小游戏源码

    如果觉得上面的实战案例有点枯燥,可以试试自己用Python编写小游戏,让你的学习过程中增添一点趣味!
    在这里插入图片描述

    五、面试资料

    我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
    在这里插入图片描述
    在这里插入图片描述

    六、Python兼职渠道

    而且学会Python以后,还可以在各大兼职平台接单赚钱,各种兼职渠道+兼职注意事项+如何和客户沟通,我都整理成文档了。
    在这里插入图片描述
    在这里插入图片描述
    这份完整版的Python全套学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

  • 相关阅读:
    Java为什么要面向接口编程?
    图像识别技术在农业领域的应用与挑战
    本周Github有趣项目:draw-a-ui等
    ORB-SLAM2 ---- ORBmatcher::SearchForTriangulation函数
    序列化和反序列化:将数据变得更加通用化
    【每日一题】补档 CF1678B-Tokitsukaze and Good 01-String | 思维 | 简单
    2.0、C语言——分支、循环语句
    Java代码审计之ofcms
    java-php-net-python-房产交易资金管理系统计算机毕业设计程序
    C/C++最大质数 2021年9月电子学会青少年软件编程(C/C++)等级考试一级真题答案解析
  • 原文地址:https://blog.csdn.net/2301_80241064/article/details/134540110