- 博客(70)
- 收藏
- 关注
原创 11月19日pandas学习总结--创建pandas对象
不同于Series对象会把字典的key作为行索引,DataFrame对象会把字典的key作为列索引。同时,字典的values应为列表或者字典。应该写为d1 = pd.DataFrame({‘a’:[1],‘b’:[3],‘c’:[7]})写为d1 = pd.DataFrame({‘a’:1,‘b’:3,‘c’:7})是错误的,pandas对象主要有两类:1、Series对象 2、DataFrame对象。1、使用列表创建,默认索引从0开始。2、使用字典创建,索引可以指定。创建DataFrame对象。
2025-11-20 00:08:09
182
原创 11月13日numpy总结——花哨的索引
使用这些索引后的取值,通常是单个值,或者不能改变元素的相对位置,但是通过花哨的索引,我们可以按照我们指定的顺序进行取值。aa[i] 的结果为array([12, 15, 13, 11]),其是按照我们指定的索引顺序取出对应的元素。利用花哨的索引,结果的形状与索引数组形状一致,而非与被索引数组形状一致。aa[row,clo]的结果为:array([ 1, 6, 11])上述的三个值分别为aa[0,1]、aa[1,2]、aa[2,3]最后,按照花哨索引的形状,从aa中取对应的值。或者aa[:2,3:]
2025-11-13 23:36:24
246
原创 11月12日numpy学习总结——numpy的广播规则
由于aa升维后,aa在第1个维度上比bb小,且第1个维度为1,因此,aa会在第1个维度上扩展。,由于bb升维后,在第1个维度上和aa不匹配,因此,bb在第一个维度上进行扩展,直到和aa的维度相同,bb会变为array([[0,1,2],,bb在第1个维度上比aa小,且维度为1,因此bb的shape为扩展为(3,3)。,由于bb的维度数较小,因此bb的维度会升维为(1,3),注意是在左边加1,不是在右边加1,即bb的shape变为(1,3),而非(3,1),bb的维度数较aa小,因此bb会升维为(1,3)
2025-11-12 22:12:11
345
原创 11月11日总结--numpy通用函数
numpy提供了很多函数,来对数组进行操作,它的函数比Python的默认函数少使用了for循环,因此能够达到更快的运行效果。任何通用函数都可以在后面加一个outer函数,来实现不同数组所有元素对的函数运算。还有一些其他通用函数,如三角函数、双曲三角函数、误差函数等,在numpy模块以及scipy.special模块中,可查阅文档。另外还有一些通用函数,如add、subtact等,可以用+ - * / 符号来直接调用。1、我们可以在函数上加一个out参数,来指定通用函数的输出结果的存放位置。
2025-11-11 23:30:15
356
原创 11月10日学习总结--numpy的基本操作
x3[1:, 2:, 3:],取第1行以后的所有行,然后在此基础伤取第2列的所有列,然后在这个基础上,取所有第3个以后的元素。x3[::-1, ::-1, ::-1],对这个行反转,对列反转,对所有的列表反转。x3.ndim:获取x3的维度属性,x3有3个维度,因此这个值是3。x3.shape:获取x3的形状,x3的形状是(3,4,5)x3[1,2,3],获取x3第1行第2列的列表的第3个元素。x3[1,2,3]=100,将x3的这个元素的值改为100。x3.size:获取x3的大小,x3的大小是3。
2025-11-10 23:09:29
162
原创 11月10日学习总结--初识numpy
我们知道,Python的底层是用C语言写的,当我们在C语言中定义一个整型变量时,其底层是一个内存地址,这个内存地址里存着我们赋的整型值。而Python的常用数据容器List,其底层也是一个C语言的指针,其可以存储不同类型的变量,这带来了很多的便利性,但是它也因此就必须记录每个变量的指针,这会让它占用更多的空间,也牺牲了运行的效率。3)长度:指示这个变量的长度,如果是字符串这样的基础类型,指示的是字节数,如果是列表这样的类型,则指示是元素个数。就会报错,提示a是一个整型,是不能赋字符串的。
2025-11-10 22:53:06
288
原创 设计模式——建造者模式(生成器模式)总结
更进一步,我们可以引入一个建造者主管的角色,建造者主管能够记住我们客户经常调用的建造者技能,比如建造市面上常用的三室一厅的房子,以前我们客户每需要一个三室一厅的房子,需要告诉建造者应该先打地基,再盖地板,再。,现在有了建造者主管这个角色,我们客户只需要告诉建造者主管,我需要一个三室一厅的房子就可以了,主管会安排建造者如果使用建造的方法。比如,我们要生成一个房子对象,建造一个房子,需要打地基、盖围墙、盖地板、安装门、安装窗户,有的房子还要盖车库,有的房子还要盖花园,有的房子要盖游泳池,有的。
2025-04-13 21:51:41
657
原创 设计模式——抽象工厂模式总结
工厂模式:https://blog.youkuaiyun.com/inside802/article/details/147170118?抽象工厂模式就是工厂模式的更加抽象化,父类不仅不承担创建对象的责任,也不承担对外的功能实现,在父类中,将全部都是接口,由子类去完全决定创建的对象以及实现的功能。对于外部客户端而言,则记住父类的功能就可以了,调用时调用父类的接口就可以了。
2025-04-13 10:51:37
435
原创 设计模式——工厂模式学习总结
至于“运输”如何实现,可以让子公司来实现,也可以让运输工具来实现,都是可以的,但是出于对以后扩展性的考虑,可以让运输工具来实现。比如,我们要将一个系统提供给用户,让用户可以自定义增加运输类型,让用户修改代码,或者让用户写的代码通过我们提供的方式植入到原有的代码中,都可能会带来安全隐患。在没有学习工厂模式前,我是这样想的,分别写个物流公司的类,然后它依赖汽车类和轮船类,让汽车类和轮船都实现运输接口,然后让用户传递一个参数,参数将决定给用户返回汽车或者轮船,这样就实现了。客户可以选择任一运输方式进行运输。
2025-04-12 19:37:24
530
原创 Python parsel库学习总结
parsel库是Python中用于解析HTML文件的库,其能通过CSS选择器、xpath、正则表达式来定位html中的元素。通过css选择器定位元素。
2024-12-01 17:22:52
399
原创 CSS选择器学习总结
如选择id为a1的a元素的子节点中class为name的所有元素,则为#a1 .name。如选择所有的class为name的元素以及所有的a标签,使用.class,a。指按照层级关系,在其子节点中查找元素的方法,使用空格表示在其子元素中查找。如选择class为name的所有元素,则使用.name。指按照选择元素,使用.号表示按照class选择元素。如选择所有的a标签以及所有的h2标签,使用a,h2。指按照id选择元素,使用#表示按照id选取元素。如选择id为a1的a元素,则使用 #a1。
2024-12-01 11:57:12
292
原创 xpath表达式学习总结
比如:获取a标签的所有父节点中所有class属性为"bird"的父节点,使用//a/parent::[contains(@class,“bird”)]比如:获取a标签的所有父亲节点,使用//a/…比如:获取a标签的所有父节点的class属性,使用//a/parent::/@class。比如:获取a标签的所有祖先,使用//a/ancestor::*比如:获取a标签的所有父节点,使用//a/parent::*比如:获取a标签下的h2节点,使用//a/h2。比如:获取a标签的所有节点,使用//a。
2024-11-17 12:07:53
305
原创 Vue3学习总结
9、计算属性:使用computed属性,可以给template传递一个经过计算后的值,当这个值放在缓存中,当这个值不发生改变时,则JS不会再次执行computed,这样就能提高运行速度。4、属性绑定:使用v-bind:命令来实现属性绑定,如果是绑定单个属性,命令为v-bind:attr=“attr”,也可以写为v-bind:attr,也可以简写为:。11、绑定CSS样式,是通过绑定style属性来实现的,语法为v-bind:style=“myStyle”.其中,myStyle是在vue中自定义的样式。
2024-07-28 16:18:30
431
1
原创 2024-3-8 python管理有序序列使用bisect模块,存放数字array比list更快更省空间
bisect.bisect(sequnce, target):返回target在sequence中的位置,该位置的标准是target放在这位置的后方,sequence仍然能保持有序。比如sequence = [1,3,4,5,10],target=6,则bisect.bisect(sequnce, target)返回值为4.bisect.insort(sequence,target):将target插入有序序列中,并能继续保持sequence的顺序。
2024-03-08 22:39:59
408
原创 2024-3-7 python创建二维列表谨防连用两个*,列表的增量赋值(+=或*=)与元组的增量赋值的差异
而元组没有实现__iadd__方法,在python底层,实际上执行的是__add__方法,把老元组和新元组相加,然后组成一个新元组,变量的引用地址(即内存中的位置)会发生变化。因此,对不可变序列进行重复拼接操作的话,效率会很低,因为每次都有一个新对象, 而解释器需要把原来对象中的元素先复制到新的对象里,然后再追加新的元素。列表实现了__iadd__方法,因此它的增量赋值,是真实的增量赋值,即把新列表添加在老列表之后,变量的引用地址(即内存中的位置)并没有变化。#1、python创建二维列表谨防连用两个*
2024-03-07 22:39:06
366
原创 2024-3-6 python列表的切片赋值
如果把切片放在赋值语句的左边,或把它作为del操作的对象,我们就可以对序列进行嫁接、切除 或就地修改操作。如果切片内带了step参数的值,则需要保证右边列表内的元素个数与左边切片内的元素个数相等,否则就会报错。
2024-03-06 23:20:08
507
原创 2024-3-4 如何写出具有python风格的代码
python风格是指自定义的数据类型表现得得与内置类型一样。比如,我创建了一个类,它的实例不用调用类的方法就可以实现迭代、切片,可以直接使用±*/等运算符。通过实现特殊方法,自定义数据类型就可以表现得跟内置类型一样,从而让我们写出更具python风格的代码。例如,在自定义类中,实现__getitem__的特殊方法,则该类的实例就可以直接使用[ ]符号,表现得和内置的序列类型(如list)一样进行读取元素、切片、迭代等操作。再比如,实现_add__特殊方法,则该类的实例就可以直接使用+号。
2024-03-04 23:07:52
290
1
原创 我的错题小结
1,reduce函数,function变量传入的函数,必须是接收两个参数的函数。同时要注意,这个函数输出结果应可以作为这个函数的输入。2、format函数必须由字符串来调用,当需要对浮点数做保留N位小数的操作时,记得{}中需要有:号。即"{:.2f}".format(3.1456),不要忘记了双引号和冒号。
2022-10-12 20:21:28
209
原创 python二叉树,层序添加节点,层序遍历节点,二叉搜索树,前序遍历
class Node: def __init__(self,value): self.value = value self.left = None self.right = None def add_by_order(self,value): """ 层序添加节点,从上到下,从左到右依次添加节点。 :param value: 要添加的节点的值 :return: None
2021-12-04 10:55:07
1148
原创 leetcode 437路径总和,前缀和知识总结
给定一个二叉树的根节点 root ,和一个整数 targetSum ,求该二叉树里节点值之和等于 targetSum 的 路径 的数目。路径 不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/path-sum-iii分析:这是一道典型的考前缀和知识的题。以我的理解,所谓前缀和,就是求从根节点到当前节点所经过的所有节点的和。设根节点的为root,当前节点
2021-11-21 16:33:21
1019
原创 最少的硬币数(完全背包问题)
题目:给定正整数数组coins表示硬币的面额和一个目标总和t,请计算凑出总和t至少需要的硬币数目。每种硬币可以使用任意多枚。如果不能用输入的硬币凑出给定的总和,则返回-1。例如,如果硬币面额为[1,3,9,10],总额t为15,那么至少需要3枚硬币,即2枚面额为3的硬币及一枚面额为9的硬币。分析:这个也是求总和的,不过每个元素可以取无限次,因此就是完全背包问题。可以使用一个矩阵来记录凑出总额最少需要多少个硬币。矩阵横轴为面额,纵轴为总和t。如下图所示,依次填充表格设上述表格的名字为board,位置都从
2021-11-14 19:57:07
1787
原创 《剑指offer》面试题38:每日温度
题目:输入一个数组,它的每个数字是某天的温度,请计算每天需要等几天才能出现更高温度。例如:输入[35,31,33,36,34],那么输出为[3, 1, 1, 1, 0].由于第一天温度为35度,要等3天才出现更高的温度36度分析:定义一个辅助列表,里面存储要等几天才能有更高温度。逐个遍历温度列表里的温度,第一个温度时,辅助列表里要等待的天数为0.后面从第二天的温度起,如果不比以前的温度高,则等待0天。如果比以前的温度高,则从此天往前看,一直看到第一天。如果第A天出现比此天温度低,并且辅助列表里第A天
2021-11-04 22:41:56
213
原创 《剑指offer》面试题37:小行星相撞
题目:输入一个表示小行星的数组,数组中的每个数字的绝对值表示小行星的大小,数字的正负号表示小行星的运动方向,正号表示向右飞行,负号表示向左飞行。如果两颗小行星相撞,那么体积小的小行星将会爆炸消失,体积大的小行星不受影响。如果相撞的两颗小行星大小相同,则它们会同时爆炸消失。飞行方向相同的小行星永远不会相撞,求最终剩下的小行星。例如:有6颗小行星[4,5,-6,4,8,-5],它们相撞之后最终剩下三颗小行星[-6,4-8].分析:可定义一个辅助的列表,然后从左往右遍历小行星列表,如果小行星是向右飞行的,
2021-11-03 21:29:00
226
原创 《剑指offer》面试题101:分割等和子集(没有使用动态规划背包问题)
大家都说这是一道背包问题,但是我觉得为啥要用背包解决呢?这类题,如果能够满足题目要求,能将一个序列分成等和的两半,那必然是数值小的一撮等于数值大的一撮,那就可以将序列排序,然后依次累加,如果累加和恰好等于总和的一半,那么就可以肯定后面那一半也等于总和的一半了,那么该序列就可以分成两个等和子序列。如果累加和在没有等于总和一半的时候,就直接超出了总和的一半,那么就可以肯定这个序列无法分成等和的两个子序列。开始的时候也可以偷个懒,先算总和,如果总和是奇数,那么不用算,这个序列肯定无法分成等和的两半。代码如下.
2021-10-28 07:53:36
240
原创 《剑指offer》面试题99:最小路径之和
题目:在一个m*n的格子中,每个位置上都有一个数字,一个机器人只会向下或向右,请计算它从左上角到达右下角的路径的数字之和的最小值。分析:和第98题一样,逻辑没那么复杂,死记硬背都可以,仍然用递归。代码如下:def dp(board,i,j): if i == 0: board[i][j] = sum(board[0][0:j+1]) return board[i][j] if j == 0: board[i][j] = sum(board[
2021-10-23 19:15:42
215
原创 《剑指offer》面试题98:路径的数目
题目:一个机器人从m*n个格子的左上角出发,它每步要么向右要么向下,直到抵达格子的右下角。请计算机器人从左上角到右下角的路径的数目。分析:这道题逻辑并不复杂,死记硬背都能过。仍然用递归,直接上代码:def dp(board,i,j): if i==0 or j == 0: board[i][j] = 1 else: board[i][j] = dp(board,i-1,j)+dp(board,i,j-1) return board[i][j]d
2021-10-23 17:25:21
229
原创 《剑指offer》面试题95:最长公共子序列(python实现)
题目:输入两个字符串,请求出它们的最长公共子序列长度。如果从字符串s1中删除若干字符之后能得到s2,那么字符串s2就是字符串s1的一个子序列。例如,从字符串’abcde‘中删除两个字符之后得到字符串’ace‘,因此‘ace’是字符串’abcde’的一个字符列。但字符串‘aec’不是字符串’abcde’的一个子序列。如果输入字符串’abcde’和’badfe’,那么它们的最长公共子序列是’bde’,因此输出3.分析:作者是用动态规划的思路写的,但是我觉得没必要用动态规划。以求字符串’abcde’和’ba
2021-10-23 09:47:37
192
原创 《剑指offer》面试题93:最长菲波那切数列(python实现)
"""题目:输入一个没有重复数字的单调递增的数组,数组中至少有3个数字,请问数组中最长的菲波那切数列的长度是多少?例如:输入[1,2,3,4,5,6,7,8],由于其中最长的菲波那切数列是1,2,3,5,8,因此输出5分析:设f(x,y)代表以nums[x],nums[y]为最大数和次大数的组合,然后往前看,是否存在一个元素等于nums[x]-nums[y],如果有一个元素(索引为z)满足这个条件,则f(x,y) = f(y,z)+=1。在递归过程中,对于f(x,y),1、如果y等于0,
2021-10-19 07:44:29
165
原创 《剑指offer》面试题91:粉刷房子(python实现)
"""题目:一排n幢房子需要粉刷成红色、绿色和蓝色,不同房子被粉刷成不同颜色的成本不同。用一个n*3的数组表示n幢房子分别用3种颜色粉刷的成本。要求任意相邻的两幢房子的颜色都不一样,请计算粉刷这n幢房子的最少成本。例如:粉刷3幢房子的成本分别为[[17, 2, 16],[15, 14, 5],[13, 3, 1]],那么分别将这3幢房子粉刷成绿、蓝、绿是最低成本,为10.分析:首先,摒弃这个故事,这道题就是给你1个数组,数组里有n个子数组,每个子数组里取一个值,要求相邻子数组的取值索引不能
2021-10-17 11:42:06
184
原创 《剑指offer》面试题90:环形房屋偷盗(python实现)
"""题目:一条环形街道上有若干房屋。输入一个数组表示某条街道上的一排房屋内的财产数量。如果这条街道上相邻的两幢房屋被盗就会触发报警系统, 请计算小偷在这条街道上个最多能偷多少财产。例如:街道上5家的财产用数组[2,3,4,5,3]表示,如果小偷傲下标1和3的房屋内盗窃,那么他能偷到价值为8的财物,这是他能偷到的最多的财物。分析:这道题我纯粹抄袭的作者的思路。就是把这个环,拆成两个单向的数组。 思路是这样的,当小偷去第n-2号房屋偷盗时,那他必然不能去第0号房屋偷盗。当去第n-1
2021-10-17 10:36:20
337
原创 《剑指offer》面试题89:房屋偷盗(python实现)
"""题目:输入一个数组表示某条街道上的一排房屋内的财产数量。如果这条街道上相邻的两幢房屋被盗就会触发报警系统,请计算小偷在这条街道上个最多能偷多少财产。例如:街道上5幢房屋内的财产用数组[2,3,4,5,3]表示,如果小偷到下标为0、2、4的房屋内盗窃,那么他能偷到价值为9的财物,这是他能偷到的最多的财物。分析:首先考虑递归关系,即元素间的推导关系。 假设站到第5个元素上,那么它的最大值,应该是max( dp(数组,备忘录,3), dp(数组,备忘录,2) ) + 数组[5]的值。
2021-10-17 09:53:09
268
原创 《剑指offer》面试题88:爬楼梯最少的成本(python实现)
"""题目:一个数组cost的所有数字都是整数,它的到底i个数字表示在一个楼梯的第i级台阶往上爬的成本,在支付了成本cost[i]后可以从第i级台阶往上爬1级或者2级。假设台阶至少有2级,既可以从第0级台阶出发,也可以从第1级台阶出发,请计算爬上台阶的最少成本。例如:输入数组[1,100,1,1,100,1],则爬上该楼梯的最少成本是4,分别经过下标为0、2、3、5的这4级台阶。分析:首先,动态规划题往往都出的是一个故事,比如偷东西、爬楼梯,这些我认为在思考问题时都应该摒弃掉,直接看问题的本质。
2021-10-17 09:20:16
321
原创 《剑指offer》面试题30:插入删除和随机访问都是O(1)的容器
"""题目:设计一个数据结构,使如下三个操作的时间复杂度都是O(1)。insert(value):如果数据集中不包含一个数值,则把它添加到数据集中。remove(value):如果数据中包含一个数值,则把它删除getRandom():随机返回数据集中的一个数值,要求数据集中每个数字被返回的概率都相同。解题思路:添加一个数据的时间复杂度为O(1)的数据结构有:链表、哈希表、列表删除一个数据的时间复杂度为O(1)的数据结构有:哈希表,列表删除最后一个元素的时间复杂度为O(1)返回一个随机数值
2021-09-12 21:32:06
341
转载 分享:使用Python构造链表
Python 数据结构之链表 - 木头人的文章 - 知乎https://zhuanlan.zhihu.com/p/60057180
2021-09-05 16:54:39
335
原创 《剑指offer》面试题20:回文子字符串的个数
"""题目:给定一个字符串,请问该字符串中有多少个回文连续子字符串?例如,字符串'ABC'有3个回文子字符串,分别为'A','B','C'; 而字符串‘AAA'有6个回文子字符串,分别为’A','A','A','AA','AA','AAA'解题思路:这个题上来一看,我的脑子里就把它翻译为求子字符串为回文的个数。 前面已经做了很多子数组或者子字符串的题了,那一定是要用到双指针了。核心逻辑就是如何移动双指针。 首先确定双指针的起始位置和方向: 如果按
2021-09-05 10:10:57
237
原创 《剑指offer》面试题19:最多删除一个字符得到回文
"""题目:给定一个字符串传,请判断如果最多从字符串中删除一个字符能不能得到一个回文字符串。 例如,如果输入字符串’ABCA‘,由于删除字符’B'或者‘C'就能得到一个回文字符串,因此输出为True解题思路:该题与第18题“有效的回文”类似,不同之处在于如果出现P1指针的值于P2指针的值不相同的情况,要进行尝试。 首先尝试P1侧删除一个字符能否形成回文,如果不行,则P1侧要恢复刚才删除的字符 然后尝试P2侧删除一个字符能否形成回文,如果不行,则可以return
2021-09-04 19:36:36
279
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅