【python基础知识】8.编程思维:如何解决问题-思维篇

news2025/1/10 2:20:49

文章目录

  • 前言
  • 瓶颈1:知识学完就忘
    • 用法查询笔记
    • 深度理解笔记
    • 知识管理
  • 瓶颈2:缺乏解题能力
    • 如何解题
      • 分析问题,明确结果
      • 思考需要的知识,或搜索新知识
      • 思考切入点
      • 尝试解决问题的一部分
      • 尝试重复1-4步
  • 总结

前言

Hi,欢迎来到第八关。

从第四关到现在,你又掌握了两种新的数据类型:列表和字典,以及while循环和for循环。同时,在上一关的实操课中,你甚至用Python写出了第一个小游戏!

回想一下,或许在不久前,你还带着些迷茫,犹豫着是否要敲开Python的大门。而现在,不知不觉中,相比最初的起点,你已经迈开了好长一段距离。

走到这里,我想你担忧的问题或许不再是“我究竟能不能学会Python?”,而变成了“我该如何更高效地学习Python?”。

关于这个问题,我自己做过整理,大部分人的Python学习问题都可以总结成这两类:

在这里插入图片描述
我十分理解,这就好比我们在学校上课时,明明老师讲的每个字都听进去了,但铃声一响,新学的知识就从脑袋里溜走了;复习到半夜,明明胸有成竹,但看到考卷的时候却一脸懵逼。

作为一个引路人,我希望我能做些什么。思来想去,最好的方法可能是把我闯荡编程江湖至今积累的“心经”传授给你——教你一些编程学习的思维,助力突破瓶颈。

毕竟,编程学习可不像我们上学那样,只是简单看课本、背书和做练习以应付考试而已。我们学Python是为了利用编程来解决现实问题,为了达到这个目的,思维的培养是必不可少的。

如果说,知识讲解是为了让你掌握基本功、项目实操是为了增加实战经验,那么,思维课的目的,是为了让你增加内功,提升Python学习效率和应用水平。

别着急,毕竟思维的积累得经历从量变到质变的过程。在这个过程中,我会将自己的经验心得分享给你,希望能对你有所启发,并在自身内化和理解的基础上,将我的经验转化成你自己的“道”了。

话不多说,接下来我就来打开你的任督二脉。首先,来看看第一个“学习瓶颈”:知识学完就忘。

瓶颈1:知识学完就忘

针对这一点,我的经验是:忘了就忘了吧,无所谓。等到要用的时候“临时抱佛脚”也是行得通的,毕竟编程是“开卷”的,你可以随时查阅。

究其原因,我们学编程是为了获得一门实用的技能。因此,所有的编程知识并不是要靠死记硬背来【记住】,而是自己真正吸收,学会【怎么用】。

有同学可能会问,既然要学会【怎么用】,不先掌握知识,那怎么可能用得起来呢?

这里要纠正一个误区:在编程学习中,【掌握】知识和【记住】知识是两个概念:【掌握知识】是知道有这个知识点,并了解它该往哪用,而【记住知识】只是强行记忆知识点,但不一定知道怎么用,用在哪。

在这里插入图片描述

然而,Python涉及到的知识点是非常多的,即便把脑子塞爆也不可能都【记住】。所以在初期,很多知识只需要你在使用的时候有个印象,遇到不明确的,就去翻看学习记录,找到知识点的具体用法,再运行代码检验。

一回生两回熟,当你使用得足够多,你就会自然形成“肌肉记忆”,对使用场景和具体用法烂熟于心。

那么,如何快速提高【掌握】知识的程度——既加深对知识的印象,又知道知识的使用场景呢?

在这里,我要和大家介绍一个对我而言很有效的学习方法:【案例笔记法】。它包括了两种类型的笔记:【用法查询笔记】和【深度理解笔记】。

听到“做笔记”这个词,你是不是想起了学生时代被老师支配的恐惧而瑟瑟发抖?

别慌,这【用法查询笔记】和【深度理解笔记】大有用处。具体长啥样,怎么用呢?其实很简单,我们看几个例子就懂了。

用法查询笔记

先来说【用法查询笔记】,【用法查询笔记】就是记录知识点的基础用法,它是你的学习记录,能供你快速查阅,加深对知识的印象。

要记住的是:不管你用什么格式记笔记,目的只有一个,就是 “方便自己查询使用”。

当然你可以多次登陆学习系统复习或者搜索相关教程,但这样可能要花一点时间才能找到想要的信息,所以将笔记统一记录在可随时查阅的文件里,不失为一个更便捷的好方法。

我自己在初学编程的时候,非常重视在案例中理解、消化知识。因此,我的笔记会以案例居多。

比如先来看一个最简单的 “算数运算符” 相关笔记:(扫一眼就行)

在这里插入图片描述
大家可以发现,这张笔记是用小例子来说明不同算数运算符的用法,并且用注释说明了(1)代码含义(2)实际运行结果。

其中代码含义往往用【#注释……】写在代码后面,实际运行效果往往用【# 》》注释……】写在代码下方。

这样注释的话会更直观,比如当要区分’%‘和’//'用法的时候就能一目了然。

我们再来看看与“列表”相关的笔记,这里,我记了一些对列表的常见操作。

在这里插入图片描述
虽然课堂上我们也是以案例带出知识点,但老师还是建议你能在课后制作一份不同于课堂的案例,写出“代码含义”和“实际运行结果”的注释,这样才能加深对知识的第一印象,需要的时候才想得起笔记在哪。

最后,再来看看以 “字典” 知识为例的笔记,当然啦,要记什么内容取决于你对具体知识点的熟悉度。

在这里插入图片描述

像这样,当你逐步解锁后续关卡,你就能积累越来越多的【用法查询笔记】:

在这里插入图片描述

除此之外,当你遇见有些课堂上老师没有涉及到的零碎知识点,也可以补充到笔记里,方便日后查看。

有了这些【查询使用笔记】,在学习新知识的时候,你可以及时回顾已学知识,在练习或实操的时候,你可以快速查看某个知识的具体使用细节。

于是,你的学习过程立马轻松了很多,因为很多知识并不要求自己直接记在脑子里,可以放到【用法查询笔记】中。

当然,“轻松”的意思,不是指我们可以在学习上摸鱼,而是让我们可以把更多时间精力花在关键之处。

说完了【用法查询笔记】,接下来我们看看【深度理解笔记】。

深度理解笔记

就像开头所说,有些知识光有印象还不够,还需要你知道这些知识该如何使用。所以我们需要【深度理解笔记】来总结、理解知识的使用场景。

【深度理解笔记】重在“理解”,所以笔记内容主要是记录对知识的理解。比如你可以看下我对于使用“循环”知识的理解笔记:

在这里插入图片描述
可以看到,如果说【用法查询笔记】解决的是“知识点是什么”的问题,那么【深度理解笔记】更侧重解决“为什么要用”以及“怎么用这个知识点”的问题。

通常来说,我们需要回答“什么时候需要用到这个知识?这个知识有什么常见用法?这个知识和其他知识有什么不同?”之类的问题,并写下自己的思考过程。

我们再来看一个关于列表和字典的例子:

在这里插入图片描述
当然,深度理解笔记不是一蹴而就的,它会随着你对某一知识的理解程度的加深而不断完善。

作为萌新,你可以尝试从“什么时候需要用到这个知识”记起,在后续练习和实操的过程,当你积累越来越多的时候,进一步补充笔记,比如补充这个知识的多种使用技巧。

知识管理

如果你学Python学到“走火入魔”的话,你会发现【深度理解笔记】和【用法查询笔记】本质上就是一个“字典嵌套列表”,其中【深度理解笔记】是键,【用法查询笔记】是值。

在这里插入图片描述
基于这个结构,我们的知识框架就搭建起来了。因为我们有【深度理解笔记】,所以在解决一个编程问题的时候,我们可以轻易想到需要用到哪块知识,接着就可以去【用法查询笔记】里寻找相关的知识细节和具体案例,形成解题的思路。

在解决了问题之后,我们还可以把一些特别典型的案例,继续补充在【用法查询笔记】,是不是有点像以前上学时我们所做的错题集。

同样地,在解题的过程中,我们可能会专门搜索并自学一些额外知识,比如random模块(里面有许多随机函数)的使用方法,也可以一并记录在笔记里。

这样子,随着我们的知识库存越来越多,知识结构越来越完整,我们使用知识也会得心应手。

所以如果你发现自己是“学完即忘”的金鱼记忆体质,不妨试一试上述所教的笔记法。当然,第一步是不要怕懒哈哈。

瓶颈2:缺乏解题能力

接下来,我们来看看困扰许多学员的第二个瓶颈:缺乏解题能力,也就是看到题目,隐隐中知道要用什么知识,但就是会像便秘一样死活卡住。

我认为这其中一个很重要的原因是还没有形成解题的思路,殊不知,解题技巧也是需要练习的。虽说解题思路是因人而异,但从中提炼共性的话,我会将解题步骤分为以下几步:

如何解题

在这里插入图片描述
接下来,我会用一道经典的题目来详细解释上述步骤:用Python打印出九九乘法表。

分析问题是解决问题的第一步,所以拿到题目的时候我们首先要思考“这是一个怎样的问题”。

分析问题,明确结果

题目要求是“打印九九乘法表”,为了让问题变得清晰,我们得先知道“九九乘法表”长什么样,即我们最终想要呈现在终端结果是什么样。

假设我们的目标是在终端打印出这种格式的九九乘法表:

在这里插入图片描述
知道了需要实现的结果后,我们就来思考一下,解决这个问题到底要用到什么知识。

思考需要的知识,或搜索新知识

首先很明显,要打印信息就必须用到最基本的print()函数。

虽然最取巧的办法是像下面这样写,但显然这么操作,Python会很生气的,因为实在太太太大材小用了。

print('1 X 1 = 1')
print('1 X 2 = 2  2 X 2 = 4')
print('1 X 3 = 3  2 X 3 = 6  3 X 3 = 9')
print('1 X 4 = 4  2 X 4 = 8  3 X 4 = 12  4 X 4 = 16')
...
...

我们可以留意到,九九乘法表是有一定规律,重复的结构,所以我们可以想到用循环来处理。

同时,我们能看到数字是在灵活变动的,所以用“格式化字符串”来为变动的数字预留位置会方便些。

现在我们知道需要用到“循环”和“格式化字符串”相关知识,那我们就可以开始思考切入点:先从什么地方入手来解决这个问题。

思考切入点

我们再来观察九九乘法表,我们会发现一个规律:每一行的等式里,第一位数会递增,第二位数则会保持不变,并且在第几行就会有多少个等式。

在这里插入图片描述
也就是说,每一行其实都可以是一个小循环,那我们就可以以此为切入点,先把每一行的小循环写出来,再进一步寻找规律。

记住从简单的切入点入手,解决一部分问题,往往会让问题变得更简单,更容易被解决。

尝试解决问题的一部分

说起循环,我们就会想到while循环和for循环,请你判断一下:
根据以往案例和讲解,你觉得这时应该优先使用那种循环语句呢?

没错,是for循环!

当循环次数是确定的时候,我们优先使用for循环。像这种知识,就可以记在关于循环的【深度理解笔记】里。

那么,现在请你小试牛刀,分别用for循环打印出九九乘法表的第二行和第三行吧!

#题目要求:用两次for循环在终端打印出:
1 X 2 = 2  2 X 2 = 4
1 X 3 = 3  2 X 3 = 6  3 X 3 = 9

可能你捣鼓一阵后答案是这样子的:

for i in range(1,3):
    print(str(i) + ' X 2 = ' + str(i*2))

for i in range(1,4):
    print(str(i) + ' X 3 = ' + str(i*3))    

你会发现字符串只能与字符串用’+'号拼接,要拼接数字的话还得先用str()转换,煞是麻烦。所以用我们刚才所说的格式化字符串处理会轻松得多。

这时,之前讲的【用法查询笔记】也能派上用场了。

在这里插入图片描述
所以,刚刚的那段代码就可以写成:(主要看格式符的用法,然后运行)

for i in range(1,3):
    print('%d X %d = %d' % (i,2,i*2))

for i in range(1,4):
    print('%d X %d = %d' % (i,3,i*3)) 

运行结果:

1 X 2 = 2
2 X 2 = 4
1 X 3 = 3
2 X 3 = 6
3 X 3 = 9

但是,运行后你会发现这样写的话每一个等式都会换行,而我们想要的结果是:

在这里插入图片描述

尝试重复1-4步

解决问题的时候发现了新的问题,所以,我们回到第2步重新思考:

思考需要的知识,或搜索新知识

现在我们希望print出来的东西不换行,那怎么实现呢?你可能突发奇想,想到用拼接一个空字符串来实现。

for i in range(1,3):
    print('%d X %d = %d' % (1,2,1*2) +'  '+ '%d X %d = %d' % (2,2,2*2))

但这样写且不说麻烦,也会让循环发挥不了作用。

现在看来,我们目前已有的知识的确没什么好的办法。不过这就难倒我们了么?

正如我反复强调的,很多零碎的知识点老师无法都直接教给你们,需要我们碰到实际问题的时候再去补充,这时就需要我们发挥“搜索大法”,主动搜索新知识。

在这里插入图片描述
这不,点进链接,我们一下子就能找到答案。(目前我们学习的是Python3)

原来print()函数里有个参数’end’是用来控制换行行数和结尾字符,比如说,你可以运行下列代码,感受一下,留意’end='后面的内容:

print('hello',end='')
print('world')

print('hello',end='  ')
print('world')

print('hello',end='!')
print('world')

运行结果:

helloworld
hello  world
hello!world

我们又要来尝试解决问题了。现在请在刚才代码的基础上优化,让它打印出不换行的效果。

说打就打,有些同学们一开始的答案可能是这样子的:

for i in range(1,3):
    print('%d X %d = %d' % (i,2,i*2),end = '  ')

for i in range(1,4):
    print('%d X %d = %d' % (i,3,i*3),end = '  ') 

运行结果:

1 X 2 = 2  2 X 2 = 4  1 X 3 = 3  2 X 3 = 6  3 X 3 = 9 

但是这样子会发现,天啊真是磨人的小机精,现在所有的等式又都挤在一行了 = =。

别愁,问题很好解决,这里就教给大家一个小技巧,用print(‘’)来控制换行,请你直接运行下下面的代码看一看:

for i in range(1,3):
    print('%d X %d = %d' % (i,2,i*2),end = '  ')
print('') #用来换行

for i in range(1,4):
    print('%d X %d = %d' % (i,3,i*3),end = '  ')  
print('') #用来换行

运行结果:

1 X 2 = 2  2 X 2 = 4  
1 X 3 = 3  2 X 3 = 6  3 X 3 = 9 

可算输出了我们想要的结果了,那么依葫芦画瓢,把所有的等式放在一起就是:

for i in range(1,2):
    print( '%d X %d = %d' % (i,1,i*1) ,end = '  ' )
print('') 

for i in range(1,3):
    print( '%d X %d = %d' % (i,2,i*2) ,end = '  ' )
print('') 

for i in range(1,4):
    print( '%d X %d = %d' % (i,3,i*3) ,end = '  ' )
print('') 

for i in range(1,5):
    print( '%d X %d = %d' % (i,4,i*4) ,end = '  ' )
print('')

for i in range(1,6):
    print( '%d X %d = %d' % (i,5,i*5) ,end = '  ' )
print('') 

for i in range(1,7):
    print( '%d X %d = %d' % (i,6,i*6) ,end = '  ' )
print('')

for i in range(1,8):
    print( '%d X %d = %d' % (i,7,i*7) ,end = '  ' )
print('') 

for i in range(1,9):
    print( '%d X %d = %d' % (i,8,i*8) ,end = '  ' )
print('') 

for i in range(1,10):
    print( '%d X %d = %d' % (i,9,i*9) ,end = '  ' )
print('') 

虽然看起来还很不优雅,但相信我到了这一步,离最后胜利只差一步之遥了!

我们可以看到以上代码是有规律的三行结构,同一结构重复了九次,这提醒我们可以再用一层循环嵌套,来彻底解决重复劳动。

我们再来看看九九乘法表,可以发现行数是固定的,范围是range(1,10),而列数(等式)则是逐行加一,即第N行就有N个等式。

在这里插入图片描述
基于此和上述已完成的代码,你想到了如何用两层for循环消灭重复吗?请尝试一下,(最终代码可以控制在四行)

参考答案:

for i in range(1,10):
    for j in range(1,i+1):
        print('{}X{}={}  '.format(j,i,j*i),end='')
    print('')

当然,解法不是唯一的,有些同学的答案可能是这样,也能达到相同效果:

for i in range (1,10):
    for j in range(1,10):
        print('%d X %d = %d' % (j,i,i*j),end = '  ')
        if i==j:
            print('')
            break

如果用while循环,也是可以的,不过对比一下,是不是还是第一种解法的代码最简洁呢~

i = 1
while i <= 9:
    j = 1
    while j <= i:
        print('%d X %d = %d' % (j,i,i*j),end = '  ') 
        j += 1
    print('')
    i += 1

到这里,我们就成功打印出九九乘法表了,撒花!

通过这个案例,你发现了吗,我们的解题步骤其实也是一个循环~所以当我们遇到复杂的题不要怂,学会拆解问题,找到突破口,就能一步步KO掉难题啦!

在这里插入图片描述

总结

最后,我们再来总结一下这一关我们所要攻克的两大瓶颈。

在这里插入图片描述

当然,编程能力的进阶不是一朝一夕就能达成的,所以即使目前你在学习上遇到了瓶颈,也不要气馁。只要你投入精力,一定会学有所成。万事开头难,而事实上你已经渡过了最难的一关。

一直以来,我的初衷是希望能帮大家在一个轻松的环境下学会Python,之后我也会不遗余力地用我的学习经验来指导大家,帮助大家减少一些理解成本和瞎折腾的时间,让我们一同继续加油!

下一关,我会带大家重新认识一个老朋友——函数。函数有什么妙用呢?到时见~

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

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

相关文章

three.js 纹理

默认情况下&#xff0c;您在 Three.js 中渲染的所有内容都会发送到屏幕上。毕竟&#xff0c;如果你看不到它&#xff0c;渲染它有什么意义呢&#xff1f;事实证明&#xff0c;有一个非常重要的点&#xff1a;在数据发送到屏幕&#xff08;从而丢失&#xff09;之前捕获数据。 …

Apache Doris 2.0 如何实现导入性能提升 2-8 倍

数据导入吞吐是 OLAP 系统性能的重要衡量标准之一&#xff0c;高效的数据导入能力能够加速数据实时处理和分析的效率。随着 Apache Doris 用户规模的不断扩大&#xff0c; 越来越多用户对数据导入提出更高的要求&#xff0c;这也为 Apache Doris 的数据导入能力带来了更大的挑战…

二进制+八进制+十进制+十六进制的转换关系

二进制+八进制+十进制+十六进制的转换关系 1.十进制:由0-9这九个数字组成,逢10进1,我们日常生活中用的就是十进制; 2.二进制:由0和1两个数字组成,逢2进1; 3.八进制:由0-7这8个数字组成,逢8进1; 4.十六进制:由0-9、A、B、C、D、E、F组成,A-F对应的是10-15,逢16进…

【Redis】为什么要学 Redis

文章目录 前言一、Redis 为什么快二、Redis 的特性2.1 将数据储存到内存中2.2 可编程性2.3 可扩展性2.4 持久性2.5 支持集群2.6 高可用性 三、Redis 的应用场景四、不能使用 Redis 的场景 前言 关于为什么要学 Redis 这个问题&#xff0c;一个字就可以回答&#xff0c;那就是&…

创建java文件 自动添加作者、时间等信息 – IDEA 技巧

文章目录 效果修改位置配置信息 效果 每次创建文件的时候&#xff0c;自动加上作者、时间等信息 修改位置 打开&#xff1a;File —> Settings —> Editor —> File and Code Templates —> includes —> FileHeader 配置信息 /*** author : JavaPub 王仕宇* d…

文件包含漏洞实战

加粗样式 文章目录 漏洞原理特点利用方法包含图片木马读取敏感文件 封装协议 复现环境准备漏洞点代码审计验证漏洞点读取敏感文件 文件包含漏洞文件上传漏洞深度利用中国蚁剑-getshell突破文件上传漏洞限制读取文件源码执行PHP命令远程文件包含 文件包含漏洞防御 本次测试仅供…

SMB 协议详解之-SMB1文件写入交互过程详解

本文介绍一下SMB协议的交互过程。由于SMB涉及非常多的字段,绝大多数人员没有必要对每个字段进行深入的了解(那可能更多的是协议开发人员需要做的工作)。对于SMB协议的学习,主要的目的是能够根据数据包的交互过程,还原出这次SMB交互干了什么,产生了哪些操作。因此本文聚焦…

centos执行systemctl restart命令报连接超时

centos执行systemctl restart命令报连接超时 Error getting authority: Error initializing authority: Error calling StartServiceByName for org.freedesktop.PolicyKit1: GDBus.Error:org.freedesktop.DBus.Error.TimedOut: Activation of org.freedesktop.PolicyKit1 tim…

LeetCode 18 四数之和

题目链接 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 题目解析 固定两个数&#xff0c;然后利用双指针来进行剩下两个数的筛选 主要使用的是三数之和的思想&#xff0c;具体可以看我上篇博客 注意去重 代码 class Solution { public:vector<…

学习笔记二十:Pod生命周期-启动钩子、停止钩子

Pod生命周期-启动钩子、停止钩子 Pod生命周期pod在整个生命周期的过程中总会处于以下几个状态&#xff1a;pod生命周期的重要行为&#xff1a;容器探测三种探针用于Pod检测 容器的重启策略定义是否重启Pod对象pod的终止过程 Init容器初始化容器与主容器区别是:初始化容器使用 P…

[Arduino电子近源渗透] Night of 19 v1.2.0

Github>https://github.com/MartinxMax/Night_of_19 首页 历史更新: Night of 19 v1.2.0 :自动获取IP,提升稳定性 Night of 19 v1.0.0 :需要静态配置IP地址 功能说明 受害者反弹shell到该设备,该设备通过蓝牙转发数据给攻击者,攻击者可远程命令执行 使用方法 #pyt…

ES6的面向对象编程以及ES6中的类和对象

一、面向对象 1、面向对象 &#xff08;1&#xff09;是一种开发思想&#xff0c;并不是具体的一种技术 &#xff08;2&#xff09;一切事物均为对象&#xff0c;在项目中主要是对象的分工协作 2、对象的特征 &#xff08;1&#xff09;对象是属性和行为的结合体 &#x…

Nodejs+vue+mysql网上药店购药系统 9h2k5

本毕业设计的内容是设计并且实现一个基于vue.js框架的空巢老人购药系统。采用MYSQL为数据库开发平台&#xff0c;nodejs语言&#xff0c;网络信息服务作为应用服务器。空巢老人购药系统的功能已基本实现&#xff0c;主要用户、家属、养生知识、药品信息、身体信息等。 论文主要…

java -- 深拷贝和浅拷贝的区别 如何实现深拷贝和浅拷贝

java -- 深拷贝和浅拷贝的区别 & 如何实现深拷贝和浅拷贝 一、 深拷贝和浅拷贝的区别二、重载clone()方法 一、 深拷贝和浅拷贝的区别 浅拷贝&#xff1a;对基本数据类型进行值传递&#xff0c;对引用数据类型进行引用传递般的拷贝&#xff0c;此为浅拷贝。 深拷贝&#x…

C#,数值计算——NRf3的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { public class NRf3 : UniVarRealValueFun { public double xsav, ysav; public RealValueFun func3d; public NRf3() { } public double funk(double z) { …

InnoDB全文索引是如何实现的?

分析&回答 全文索引的底层实现为倒排索引。 为什么叫倒排索引&#xff08;反向索引&#xff09; 当表上存在全文索引时&#xff0c;就会隐式的建立一个名为FTS_DOC_ID的列&#xff0c;并在其上创建一个唯一索引&#xff0c;用于标识分词出现的记录行。你也可以显式的创建…

中国电信研究院发布《5G+数字孪生赋能城市数字化应用研究报告》

9月5日&#xff0c;中国电信研究院战略发展研究所联合中关村智慧城市产业技术创新战略联盟在2023年中国国际服务贸易交易会数字孪生专题论坛正式对外发布《5G数字孪生赋能城市数字化应用研究报告》。 会上&#xff0c;中国电信研究院战略发展研究所副所长季鸿从数字中国…

力扣(LeetCode)算法_C++——稀疏矩阵的乘法

给定两个 稀疏矩阵 &#xff1a;大小为 m x k 的稀疏矩阵 mat1 和大小为 k x n 的稀疏矩阵 mat2 &#xff0c;返回 mat1 x mat2 的结果。你可以假设乘法总是可能的。 示例 1&#xff1a; 输入&#xff1a;mat1 [[1,0,0],[-1,0,3]], mat2 [[7,0,0],[0,0,0],[0,0,1]] 输出&am…

【PowerQuery】导入与加载XML

在标准数据格式类型里面,有一类比较特殊的数据类型,就是层次结构数据。层次结构数据和标准的结构型数据方式完全不同,在实际应用过程中使用最为频繁的几种数据类型如下。 XML数据格式Json 数据格式Yaml 数据格式我们将在本节和大家一起分享下XML格式数据集成,下一节和大家分…

【开发】安防监控/视频汇聚/云存储/AI智能视频融合平台页面新增地图模式

AI智能分析网关包含有20多种算法&#xff0c;包括人脸、人体、车辆、车牌、行为分析、烟火、入侵、聚集、安全帽、反光衣等等&#xff0c;可应用在安全生产、通用园区、智慧食安、智慧城管、智慧煤矿等场景中。将网关硬件结合我们的视频汇聚/安防监控/视频融合平台EasyCVR一起使…