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

文章目录

      • 前言
    • Python有那几种数据结构?
      • 1)列表(list)
        • 1.1 什么是列表?
        • 1.2列表的增删改查
      • 2)字典(Dictionary)
        • 2.1 什么是字典?
        • 2.2 字典的增删改查
      • 3)元组(Tuple)
      • 4)集合(Set)
        • 4.1什么是集合?
      • 5)番外——数据结构的一些技巧
        • 5.1多重循环
        • 5.2推导式
      • 5.3循环列表时获取元素的索引
      • 关于Python技术储备
        • 一、Python所有方向的学习路线
        • 二、Python基础学习视频
        • 三、精品Python学习书籍
        • 四、Python工具包+项目源码合集
        • ①Python工具包
        • ②Python实战案例
        • ③Python小游戏源码
        • 五、面试资料
        • 六、Python兼职渠道


前言

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

Python有那几种数据结构?

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

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

1)列表(list)

1.1 什么是列表?

最显著的特征是:

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

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

输入:

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

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

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)

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

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

2)字典(Dictionary)

2.1 什么是字典?

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

字典的特征总结如下:

  • 字典中数据必须是以键值对的形式出现的;
  • 逻辑上讲,键是不能重复的,而值可以重复;
  • 字典中的键(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)

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

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多重循环

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

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

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

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

sorted(num\_list,reverse=True)

在整理列表的过程中,如果同时需要两个列表应该怎么办?这时候就可以用到 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.999999999998592e-06 seconds process time
0.0012320000000000005 seconds process 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

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

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

关于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%免费

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

STM32通用定时器产生PWM信号

STM32通用定时器产生PWM信号 PWM信号stm32定时器PWM生成模式PWM配置基本步骤PWM周期计算CubeMX配置代码展现 本期内容我将展示使用STM32通用定时器产生PWM信号,这里以定时器3通道3为例 PWM信号 如果还不懂的话,可以看看 : “蓝桥杯单片机学习…

SSM框架(一):Spring 容器

文章目录 一、Spring Framework系统框架二、IoC控制反转 与 DI依赖注入 简单入门三、Bean3.1 Bean的配置3.2 实例化Bean的四种方式3.3 Bean的生命周期 四、依赖注入4.1 setter注入4.2 构造器注入4.3 注入方式选择4.4 依赖自动装配4.5 集合注入4.6 案例:配置数据库4.…

Android加固为何重要?很多人不学

为什么要加固? APP加固是对APP代码逻辑的一种保护。原理是将应用文件进行某种形式的转换,包括不限于隐藏,混淆,加密等操作,进一步保护软件的利益不受损坏。总结主要有以下三方面预期效果: 1.防篡改&#x…

JSP在线商城系统eclipse定制开发mysql数据库BS模式java编程B2C

一、源码特点 java 在线商城系统是一套完善的web设计系统 ,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,eclipse开发,数据库为Mysql5.0,使用…

Redis事务+秒杀案例

Redis事务是一个单独的隔离操作,是指将多条命令放在一个命令队列当中,按顺序执行,保证多个命令在同一个事务中执行而不受其他客户端的影响。 通俗来说就是:串联多个命令防止别的命令插队。 1.Multi、Exec、discard 在输入Multi命…

基于非链式(数组)结点结构的二叉树的层序、先序、中序、后序输入创建以及层序、先序、中序、后序输出

这个系列来记录学习一下如何用数组完成二叉树的4种顺序的创建,以及其4种顺序的遍历。 我们知道,对于一棵二叉树而言它有4种遍历的顺序,那自然就导致其输入结点时,也分这四种顺序。 分别是—— 层序: …

STM32定时器输入捕获测量高电平时间

STM32定时器输入捕获测量高电平时间 输入捕获测量高电平时间CuebMX配置代码部分 本篇内容要求读者对STM32通用定时器有一点理解,如有不解,请看 夜深人静学32系列15——通用定时器 输入捕获 输入捕获是STM32通用定时器的一种功能,可以捕获特定…

Selenium自动化测试详解

最近也有很多人私下问我,selenium学习难吗,基础入门的学习内容很多是3以前的版本资料,对于有基础的人来说,3到4的差别虽然有,但是不足以影响自己,但是对于没有学过的人来说,通过资料再到自己写的…

微信小程序记住密码,让登录解放双手

密码是用户最重要的数据,也是系统最需要保护的数据,我们在登录的时候需要用账号密码请求登录接口,如果用户勾选记住密码,那么下一次登录时,我们需要将账号密码回填到输入框,用户可以直接登录系统。我们分别…

从零开始的c语言日记day35——数据在内存中的储存

数据类型介绍 之前已经学了了一些基本的内置类型,以及空间大小。 类型的意义: 使用这个类型开辟内存空间的大小(大小决定了使用范围)。如何看待内存空间的视角 类型的基本归类 整形: 字符的本质是ASCLL码值&#x…

Java中的抽象类和接口

目录 1. 抽象类 1.1 抽象类概念 1.2 抽象类语法 1.3 抽象类需要注意的点 1.4 抽象类的作用 2. 接口 2.1 接口的概念 2.2 语法规则 2.3 接口使用 2.4 接口特性 2.5 实现多个接口 2.6 接口间的继承 2.7 接口使用实例 2.8 Clonable接口,浅拷贝和深拷贝 2.9 抽…

使用pytorch利用神经网络原理进行图片的训练(持续学习中....)

1.做这件事的目的 语言只是工具,使用python训练图片数据,最终会得到.pth的训练文件,java有使用这个文件进行图片识别的工具,顺便整合,我觉得Neo4J正确率太低了,草莓都能识别成为苹果,而且速度慢,不能持续识别视频帧 2.什么是神经网络?(其实就是数学的排列组合最终得到统计结果…

算法分析与设计课后练习23

求下面的0-1背包问题 (1)N5,M12,(p1,p2,…,p5)(10,15,6,8,4),(w1,w2,…,w5)(4,6,3,4,2) (2)N5,M15,(p1,p2,…,p5)(w1,w2,…,w5)(4,4,5,8,9)

深入理解JSON及其在Java中的应用

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏:每天一个知识点 ✨特色专栏&#xff1a…

日常办公:批处理编写Word邮件合并获取图片全路径

大家在使用Word邮件合并这个功能,比如制作席卡、贺卡、准考证、员工档案、成绩单、邀请函、名片等等,那就需要对图片路径进行转换处理,此脚本就是直接将图片的路径提取出来,并把内容放到txt格式的文本文档里,打开Excel…

netty整合websocket(完美教程)

websocket的介绍: WebSocket是一种在网络通信中的协议,它是独立于HTTP协议的。该协议基于TCP/IP协议,可以提供双向通讯并保有状态。这意味着客户端和服务器可以进行实时响应,并且这种响应是双向的。WebSocket协议端口通常是80&am…

Redis:抢单预热

前言 在当今的互联网时代,抢单活动已经成为了电商平台、外卖平台等各种电子商务平台中常见的营销手段。通过抢单活动,商家可以吸引大量用户参与,从而提高销量和知名度。然而,抢单活动所带来的高并发请求往往会给系统带来巨大的压…

opencv-形态学处理

通过阈值化分割可以得到二值图,但往往会出现图像中物体形态不完整,变的残缺,可以通过形态学处理,使其变得丰满,或者去除掉多余的像素。常用的形态学处理算法包括:腐蚀,膨胀,开运算&a…

Spring-IOC-@Import的用法

1、Car.java package com.atguigu.ioc; import lombok.Data; Data public class Car {private String cname; }2、 MySpringConfiguration2.java package com.atguigu.ioc; import org.springframework.context.annotation.Bean; import org.springframework.context.annotatio…

一、防火墙-基础知识

学习防火墙之前,对路由交换应要有一定的认识 1、什么是防火墙2、防火墙的发展史3、安全区域3.1.接口、网络和安全区域的关系3.2.报文在安全区域之间流动方向3.3.安全区域的配置安全区域小实验 3.4.状态检测和会话机制3.4.1.状态检测3.4.2.会话 3.5.状态检测和会话机…