![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Python
文章平均质量分 59
王魚(Jones)
某不知名公司的某不知名算法工程师
展开
-
C++编译为动态链接库并用python调用
将C++编译为动态链接库并用python调用其函数原创 2022-04-27 18:54:33 · 2867 阅读 · 2 评论 -
最短路径算法-Dijkstra(迪杰斯特拉)-python
如果不清楚原理的话,看下这个视频(简单易懂,只有4分钟)B站:dijkstra算法求最短路径看过之后就知道基本原理了。算法实现步骤:① 每次找出当前图中距离源点1最近的点k,② 计算源点1经过该点k到达某个点j是否比原来更近,如果更近,则把源点1到某个点j的距离,替换为这个更近的距离。③ 经过n-1次查找(把除了源点之外的点都遍历一遍,每个点都当一次中介值),即可得出源点到每个点最近的距离。如图:实现代码如下:(注释非常详细)# -*- coding: utf-8 -*-def ge原创 2021-03-07 14:32:33 · 4758 阅读 · 4 评论 -
左神算法-初级8(python)
左神算法-初级8贪心策略:累加1、 金条和铜板2、 IPO3、 会议室项目宣讲递归和动态规划1、 汉诺塔问题2、待续贪心策略:累加1、 金条和铜板一块金条切成两半,是需要花费和长度数值一样的铜板的。比如长度为20的金条,不管切成长度多大的两半,都要花费20个铜板。一群人想整分整块金条,怎么分最省铜板?代价=金条长度分割金条,返回最小分割代价:[60, [10,20,30]]哈夫曼编码问题,结果为所有非叶节点的和;构建小根堆:每次拿出最小的两个数,计算和,重新放入堆,直到只剩一个数即为结果(贪心原创 2020-12-22 19:34:08 · 525 阅读 · 0 评论 -
左神算法-初级7(python)
左神算法-初级7并、查集前缀树字典序并、查集'''并、查集1. isSameset(A,B)2. union(A, B)3. 一次性输入全部数据,不支持动态数据流'''class UnionFind(): def __init__(self): self.fatherMap = {} # key:子, value:父 self.sizeMap = {} # key:当前元素,value:当前元素所属集合元素总数 def makeset(原创 2020-12-18 17:25:05 · 205 阅读 · 1 评论 -
左神算法-初级6(python)
左神算法-初级6哈希函数和哈希表哈希函数哈希函数性质:哈希函数特点:生成1000个相对独立的哈希函数:哈希表设计 RandomPool 结构布隆过滤器认识一致性哈希哈希函数和哈希表哈希函数哈希函数性质:① 输入域无穷大② 输出域有限③ 输入一样,输出一样④ 哈希碰撞⑤ 离散性(输入域经过哈希函数在输出域上均匀分布),输出域模一个数k,得到的结果还是均匀分布。哈希函数特点:输出和输入无关(打乱输入规律)生成1000个相对独立的哈希函数:假设哈希函数的输出域是h,那么输出域的前一半h1和原创 2020-12-18 14:27:58 · 392 阅读 · 1 评论 -
约瑟夫环问题(简单解法和递归解法)(python)
约瑟夫环问题的简单解法和递归解法简单解法使用双向队列(deque) 函数使用列表加指针双层遍历递归解法相关题:剑指offer 46 - 孩子们的游戏简单解法思路:刚开始把所有的人放到一个列表里面去,报的数字不是k就把这个人放到列表的最后一个位置上面去,如果是k就把这个数字从列表中去掉,直到列表剩下1个人为止。使用双向队列(deque) 函数deque函数简介from collections import deque #deque是一种双向队列,底层据说也是同样用双链表实现的deque.r原创 2020-12-11 14:44:48 · 2516 阅读 · 1 评论 -
左神算法-初级5(python)
左神算法-初级4二叉树0、构建二叉树1、实现二叉树的先序、 中序、 后序遍历2、中序遍历后继/前继节点3、二叉树的序列化和反序列化(前序、层序)4、平衡二叉树,左右子树高度差不超1(不一定是满树)、满二叉树(一定是平衡树)未完待续未完待续二叉树0、构建二叉树class BinaryTree(object): def __init__(self, data): self.data = data self.child_l = None self.ch原创 2020-12-10 20:21:28 · 327 阅读 · 1 评论 -
左神算法-初级4(python)
这里写目录标题矩阵1、转圈打印矩阵2、旋转正方形矩阵3、“之” 字形打印矩阵链表1、判断一个单链表是否是回文结构2、链表与荷兰国旗问题3、复制含有随机指针节点的链表4、两个单链表相交问题矩阵1、转圈打印矩阵2、旋转正方形矩阵3、“之” 字形打印矩阵链表1、判断一个单链表是否是回文结构2、链表与荷兰国旗问题3、复制含有随机指针节点的链表4、两个单链表相交问题1、转圈打印矩阵【要求】 额外空间复杂度为O(1)转圈打印的过程就是不断顺时针打印外围元素的过程,只要给你一个左上角的点(如(0原创 2020-12-08 16:31:44 · 358 阅读 · 2 评论 -
过河问题(贪心算法)(python)
过河问题(贪心算法) - CapitalAccumulation - 博客园 思路非常清晰过河问题一、问题描述二、问题答案三、扩展四、问题推广五、对于本题的最优选择:coding一、问题描述在漆黑的夜里,甲乙丙丁共四位旅行者来到了一座狭窄而且没有护栏的桥边。如果不借助手电筒的话,大家是无论如何也不敢过桥的。不幸的是,四个人一共只带了一只手电筒,而桥窄得只够让两个人同时过。如果各自单独过桥的话,四人所需要的时间分别是1、2、5、8分钟;而如果两人同时过桥,所需要的时间就是走得比较慢的那个人单独行动时所原创 2020-12-11 11:54:41 · 6567 阅读 · 0 评论 -
洛谷 python P1736 创意吃鱼法
状态方程:dp[i][j] = min(dp[i-1][j-1], min(s1[i][j-1] , s2[i-1][j]) )s1为记录i,j点的上面最多连续多少没有鱼 s2为左面最多连续多少没有鱼先从左上到右下扫描一遍再从右上到左下扫描一遍n, m = map(int, input().split())matrix = []for i in range(n): tmp = list(map(int, input().split())) if tmp:...原创 2020-09-09 12:37:19 · 179 阅读 · 0 评论 -
八大排序算法
注:稳定指如果a原本在b前面,而a=b,排序之后a仍然在b的前面。 时间复杂度:对排序数据的总的操作次数。反映当n变化时,操作次数呈现什么规律。 空间复杂度:是指算法在计算机内执行时所需存储空间的度量,它也是数据规模n的函数。常见的8种排序方法,按照排序的方式分为插入排序(插入排序(稳定)、希尔排序)交换排序(冒泡排序(稳定)、快速排序):两两对比,不断交换,将n-i的最大值放到最后选择排序(选择排序、堆排序):选择i后面的最小值与i交换归并排序:(稳定)采用分治法。先分解,.原创 2020-08-31 17:56:32 · 194 阅读 · 0 评论 -
2020-08-28
Python的类变量和对象变量声明解析和C++一样,也都是存在两种类型的变量,类变量和对象变量!前者由类拥有,被所有对象共享,后者由每个对象独有。这里我主要想讨论一下他们的声明办法。首先说的是对象变量: 只要是声明在类的语句块中,且没有"self."前缀的变量都是类变量,且类变量是被所有对象共享的。 注意,如果声明在类的方法的语句块中,那么就是局部变量了!比如下面这个例子:1 #!/usr/bin/env python2 # -* - coding: UTF-8 -* -3 #Functi转载 2020-08-28 10:42:45 · 92 阅读 · 0 评论 -
sys.stdin和input,sys.stdin与input
>>> a = sys.stdin.readline()asd>>> b = input()asd>>> len(a)4>>> len(b)3>>> a'asd\n'>>> b'asd'>>> a = sys.stdin.readline().strip()asd>>> a'asd'1、sys.stdin.readline( )会将原创 2020-08-02 11:41:18 · 469 阅读 · 0 评论 -
python 取反操作符(~)
误人子弟呀 误人子弟,看了几篇博客,真的是坑~ : 按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1 。~x 类似于 -x-11、补码:下面5条是计算的依据:①正数的原码、反码、补码都是一样的②负数的补码为符号位不变,剩余位取反再加1③原码求补码: 取反,+1④补码求原码: 取反,+1⑤负数是以补码存储的⑥取反操作是在原码上进行的⑦符号位,1表示负数,0表示正数2、例子####################~(-2)首先你要知道 -2 在计算机里面的原创 2020-07-29 10:31:26 · 25234 阅读 · 4 评论 -
Python 中的 if __name__ == '__main__' 该如何理解
1. 摘要通俗的理解__name__ == '__main__’:假如你叫小明.py,在朋友眼中,你是小明(__name__ == '小明');在你自己眼中,你是你自己(__name__ == '__main__')。if __name__ == '__main__'的意思是:当.py文件被直接运行时,if __name__ == '__main__'之下的代码块将被运行;当.py文件以模块形...转载 2019-05-08 10:41:32 · 144 阅读 · 0 评论 -
python - 字典排序 - 分别按照key值、value值进行
看到排序,首先想到的就是python内建函数sorted() 和列表内建函数sort()注意:他们是不一样的:① sort是在原位重新排列列表(没有返回值,不小心就容易出错,可以看没有返回值的函数),而sorted()是产生一个新的列表;② sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。正题1、字典按照key排序直接调用 sorted(iterable,key,reverse)其中:iterable表示可以迭代的对象,例如可以是dict.ite原创 2020-07-24 16:07:53 · 8227 阅读 · 0 评论 -
动态规划——硬币找零问题(python)
如果对动态规划的原理不是很清晰,看这篇博客动态规划(DP)的整理-Python描述里面的列子很生动。首先我们要知道为什么要使用dp,我们在选择dp算法的时候,往往是在决策问题上,而且是在如果不使用dp,直接暴力效率会很低的情况下选择使用dp.什么时候会选择使用dp呢,一般情况下,我们能将问题抽象出来,并且问题满足无后效性,满足最优子结构,并且能明确的找出状态转移方程的话,dp无疑是很好的选择。无后效性通俗的说就是只要我们得出了当前状态,而不用管这个状态怎么来的,也就是说之前的状态已经用不着了,如果原创 2020-07-16 09:54:41 · 1173 阅读 · 0 评论 -
列表vs元组
不可变数据类型:数字、字符串、元组可变数据类型:字典、列表元组用于你不想你的数据你不了解的函数篡改时;注意* 元组内的可变对象是可以改变的,比如元组内的列表①所有的多对象的,逗号分隔的,没有明确用符号定义的(比如方括号[]表示列表),这些集合默认的类型都是元组②所有函数返回的多对象(不包括有符号封装的,比如方括号[]表示列表)都是元组类型,有符号封装的多对象集合其实时返回的一个单一的容器对象列表用于管理动态数据集合,不定期的添加或移除元素;列表类型内建函数:append(obj) #原创 2020-07-15 16:40:26 · 146 阅读 · 0 评论 -
split() 和 split(‘ ‘) 的区别
描述split() 通过指定分隔符对字符串进行切片,如果第二个参数 num 有指定值,则分割为 num+1 个子字符串。语法split() 方法语法:str.split(str="", num=string.count(str))参数str – 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。num – 分割次数。默认为 -1, 即分隔所有。在牛客网刷题翻转单词顺序列的时候遇到一个问题,使用 s.split()无法对空字符串进行处理,而s.split(‘ ’)就没问题,原创 2020-07-11 16:20:37 · 2641 阅读 · 0 评论 -
heapq内置模块
heapq内置模块位于./Anaconda3/Lib/heapq.py,提供基于堆的优先排序算法堆的逻辑结构就是完全二叉树,并且二叉树中父节点的值小于等于该节点的所有子节点的值。这种实现可以使用 heap[k] <= heap[2k+1] 并且 heap[k] <= heap[2k+2] (其中 k 为索引,从 0 开始计数)的形式体现,对于堆来说,最小元素即为根元素 heap[0]。堆还分为两种类型:大根堆、小根堆堆的基本概念及其操作顾名思义,就是保证根节点是所有数据中最大/小,并且尽力原创 2020-07-07 10:41:09 · 286 阅读 · 0 评论 -
sort和sorted的区别和使用方法
Python list内置sort()方法用来排序,也可以用python内置的全局sorted()方法来对可迭代的序列排序生成新的序列。①简单的升序排序是非常容易的。只需要调用sorted()方法。它返回一个新的list。>>> a = [5, 2, 3, 1, 4]>>> a.sorted()Traceback (most recent call last): File "<stdin>", line 1, in <module>A原创 2020-07-02 12:36:28 · 501 阅读 · 0 评论 -
Python 一切皆对象!
python一切皆对象——字符、数字、列表、元组、集合、字典、函数、类、模块、某种操作、甚至Python本身,等等都是对象。1、“Python, 一切都可以赋值!”一切都可以赋值!也就是可以执行‘=’操作。变量可以赋值、属性可以赋值、方法可以赋值、函数可以赋值、任何一种操作都可以赋值,即使很多时候这种赋值没有任何实际意义,但依然可以赋值!>>> a = [1,2,3]>>> a.append(4)>>> a[1, 2, 3, 4]>&原创 2020-07-02 11:05:01 · 160 阅读 · 0 评论 -
命名空间和作用域
命名空间命名空间(Namespace)是从名称到对象的映射,命名空间的内容以字典形式给出,字典的key是已命名的变量或函数名称,value是这些变量或函数的值。一般有三种命名空间:①内置名称(built-in names), Python 语言内置的名称,比如函数名 abs、char 和异常名称 BaseException、Exception 等等。②全局名称(global names),模块中定义的名称,记录了模块的变量,包括函数、类、其它导入的模块、模块级的变量和常量。③局部名称(loca原创 2020-07-02 10:10:37 · 249 阅读 · 0 评论 -
模块、包、命名空间和作用域
模块模块是python中的最高组织单元,在物理层面上,模块以文件存储,模块的文件名就是模块的名字.py,每个模块都有自己的名称空间。python按照路径搜索来查找模块文件,在PYTHONPATH环境变量中的路径为Python模块的搜索路径,通过sys.path属性可以看到模块搜索路径的列表,python按照这个列表的顺序对模块进行搜索,所以在路径列表前面的路径搜索到模块之后就不会继续搜索。由于该值是一个列表,可以通过sys.path.append方法,或者sys.path.insert方法添加路径到该列原创 2020-07-01 20:36:00 · 244 阅读 · 0 评论 -
yield
带有 yield 的函数在 Python 中被称之为 generator(生成器)def fab(max): n, a, b = 0, 0, 1 while n < max: yield b # 使用 yield # print b a, b = b, a + b n = n + 1 for n in fab(5): print nyield 的作用就是把一个函数变成一个 genera原创 2020-07-01 19:39:09 · 426 阅读 · 0 评论 -
Python中append和extend的区别
list.append(object) 向列表中添加一个对象objectlist.extend(sequence) 把一个序列seq的内容添加到列表中>>> a[1, 2, 3, 'wang', '王']>>> b['li', 'zhang']>>> a.append(b)>>> a[1, 2, 3, 'wang', '王', ['li', 'zhang']]使用append的时候,是将b看作一个对象,整体打包添加到原创 2020-06-30 12:49:37 · 1856 阅读 · 0 评论 -
没有返回值的函数(reverse, sort,append...)
python的有些内置方法是不返回具体的内容的,而是返回一个None。并不是所有的函数都需要返回值,有一些函数只需要在内部处理些东西,如果要输出,可以直接通过print函数输出信息,那么在这种情况下,就没有必要返回函数。如果Python函数没有返回值,不使用return语句就可以了,或使用return语句,但return后面什么都没有。后一种情况主要是用于从函数的任意深度的代码直接跳出函数。>>> a = [1,2,2,3,5]>>> a.reverse()&原创 2020-06-29 12:53:21 · 4996 阅读 · 2 评论 -
集合 和 set()函数
1.集合(set)集合:是一个无序的不重复元素序列。可以使用大括号 { } 或者 set() 函数创建集合;注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。创建格式:parame = {value01,value02,...}或者set(value)集合基本操作s.add( x )s.update( x )s.remove( x )s.clear()2.set() 函数创建一个无序不重复元素集(即集合),可进行关系测试,删除重复数据,原创 2020-06-28 12:29:18 · 1260 阅读 · 0 评论 -
str is none 和 len(str)==0 有什么区别?
>>> str = ''>>> print(str is None)False>>> print(len(str))0>>> str = None>>> type(str)<class 'NoneType'>>>> print(str is None)True>>> print(len(str))Traceback (most recent call原创 2020-06-24 19:55:53 · 1049 阅读 · 0 评论 -
从excel读取列数据,并使用GM预测模型预测
"""用到函数库: pandas, numpy, openpyxl, matplotlib预测不同的网络要选用不同的参数:pre_number :向后预测的次数,每次增加一个值 use_end_number :每次预测所用末尾数据的条目数"""import pandas as pdimport numpy as npimport openpyxlimport matplotlib.pyplot as pltimport mat.原创 2020-05-24 20:28:48 · 1187 阅读 · 0 评论 -
从excel读取列数据,生成列表文件或者csv文件
import openpyxlimport matplotlib.pyplot as pltimport pandas as pdimport csvimport codecs# col_range = ws['B:E']# for col in col_range: # 打印BC两列单元格中的值内容# for cell in col:# print(len(col))# print(cell.value)class Datatrans(o.原创 2020-05-24 20:16:25 · 533 阅读 · 0 评论 -
从excel读取列数据,并批量生成文件夹或文本文档
import openpyxlimport os# 读取excel文件wb = openpyxl.load_workbook('1.xlsx')ws = wb.active # 当前活跃的表单G = ws['A'] # 获得A列数据print(len(G))df = []path = './子目录/'for cell in G: df.append(cell.value) df = list(filter(None, df)) # print(d.原创 2020-05-24 20:12:33 · 1218 阅读 · 0 评论 -
Python中下划线的含义
Python中有关单个和双下划线(“ dunder”)的各种含义和命名约定,名称修饰的工作方式以及它如何影响Python类。单下划线和双下划线在Python变量和方法名称中具有含义。其中的某些含义仅是约定俗成的内容,旨在作为对程序员的提示-某些含义是由Python解释器实施的。在本文中,我将讨论以下五个下划线模式和命名约定,以及它们如何影响Python程序的行为:·*单引号下划线:var单尾...原创 2020-03-27 18:46:19 · 336 阅读 · 0 评论 -
pip install安装dlib.whl文件出现 is not a supported wheel on this platform.
>pip install dlib-19.7.0-cp36-cp36m-win_amd64.whlERROR: dlib-19.7.0-cp36-cp36m-win_amd64.whl is not a supported wheel on this platform.出现这个问题的原因是版本不匹配查看本机python的版本匹配哪些文件>>>pythonPyt...原创 2020-03-21 15:41:37 · 11235 阅读 · 3 评论 -
Spyder 调试 Python代码的两种方法
1、使用Spyder本身的快捷键**使用该方法,必须设定断点**设置断点两种方法:① 选中改行,按F12②双击代码行号前面快捷键如下:快捷键含义:![在这里插入图片描述](https://img-blog.csdnimg.cn/201911061910484![在这里插入图片描述](https://img-blog.csdnimg.cn/20191106191922928.png...原创 2019-11-06 19:52:27 · 6923 阅读 · 0 评论