python
文章平均质量分 60
Marvin Ming
目前在国企研究院做软件研发项目,擅长Python,爬虫、数据分析、软件开发和后端均有涉猎。
关于博客文章有任何问题请留言,我会不定期回复,欢迎交流,但百度10分钟内能够解决的问题不会回复。
其他问题可通过邮箱联系:constmmq@163.com。
展开
-
PySide2之QTableView结合QAbstractTableModel显示表格数据
Model负责与数据源通讯,并提供接口给结构中的别的组件使用。通讯的实质依赖于数据源的类型与Model实现的方式。View从Model获取模型索引,模型索引是数据项的引用。通过把模型索引提供给Model,View可以从数据源中获取数据。需求描述继承QAbstractTableModel类,创建自定义Model,用于保存表格类数据,供QtableView、QChart等视图调用显示。原创 2021-09-05 11:21:48 · 4402 阅读 · 0 评论 -
排序算法(七)——快速排序算法详解及Python实现
一、简介快速排序算法最早是由图灵奖获得者Tony Hoare设计的,被列为20世纪十大算法之一。属于交换排序类,是冒泡排序算法的升级,是一种不稳定排序算法,其时间复杂度为O(nlogn)。二、算法介绍快速排序算法的基本思想是:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可对这两部分记录继续进行排序,以达到整个序列有序的目的。选取数组中第一个元素作为pivot key(枢轴),即令pv = li[low],然后从数组的两端向中间扫描;当low &l原创 2021-08-05 22:52:39 · 576 阅读 · 1 评论 -
排序算法(六)——归并排序算法详解及Python实现
一、简介归并排序(Merging Sort)算法是一种稳定排序算法,和堆排序算法一样,都是利用完全二叉树的深度是⌊logn⌋\lfloor logn\rfloor⌊logn⌋+1 的特性,来提高排序效率,其时间复杂度和堆排序相同,均为O(nlogn)。二、算法介绍归并排序就是利用归并(将两个或以上的有序表组合成一个新的有序表)的思想实现的排序方法。基本原理是:假设初设序列有n个记录,则可以看成是n个有序的子序列,每个子序列的长度为1, 然后两两归并,得到⌈n/2⌉\lceil n/2 \rceil⌈原创 2021-08-04 11:18:03 · 717 阅读 · 6 评论 -
排序算法(五)——堆排序算法详解及Python实现
本文目录一、简介二、算法介绍三、代码实现排序算法系列——相关文章一、简介堆排序(Heap Sort)算法,属于选择排序类,不稳定排序,时间复杂度O(nlogn)。堆排序由Floyd和Williams在1964年共同发明,是对简单选择排序算法的优化,其出发点是:简单选择排序在遍历时,在待排序的n个元素中,需进行n-1次比较,才能选择出最小的元素,但没有将每次遍历时比较的结果保存下来,导致后续遍历时仍需进行重复操作,因此导致元素比较次数较多。堆排序就是通过堆这种结构,实现了在选择出最小元素的同时,保存了原创 2021-08-04 07:47:57 · 1935 阅读 · 6 评论 -
排序算法(四)——希尔排序算法详解及Python实现
一、简介希尔排序(Shell Sort)算法,属于插入排序类,是不稳定排序,是对直接插入排序算法的优化,其时间复杂度为O(n3/2)。希尔排序是D.L.Shell 于1959年提出来的算法,在此之前排序算法的时间复杂度基本上都是O(n2)的,希尔排序是突破这个时间复杂度的第一批算法之一。[1]二、算法介绍直接插入排序算法在1-数组基本有序或2-数组元素较少时效率很高,希尔排序的出发点就是如何对待排序数组进行调整,使其满足上述两个条件,从而利用直接插入排序算法的优势。最终,科学家Shell通过对数原创 2021-08-03 10:39:47 · 632 阅读 · 2 评论 -
排序算法(三)——直接插入排序算法详解及Python实现
一、简介直接插入排序算法是一种稳定排序算法,其每次循环将特定值插入前面排序好的数组部分,时间复杂度为O(n2),性能好于冒泡排序和选择排序。二、算法介绍算法步骤:遍历数组,令i从0到n-2,若当前元素li[i]大于后一元素li[i+1],则移动元素;移动方式为:将li[i+1]赋值给t,令j=i+1,然后从位置i向前遍历,若li[j-1] > t,则将位置j-1的元素向后移动,即li[j] = li[j-1],直至li[j-1] >= t,然后将元素li[j+1]插入至位置j处。此处原创 2021-08-02 17:28:20 · 712 阅读 · 0 评论 -
排序算法(一)——冒泡排序算法详解及Python实现
一、简介冒泡排序算法是众多排序算法中思路最简单、最容易理解的一个。直观理解就是将数组中较小(或较大)的值不断上浮,最终形成有序数组,这个过程类似于气泡从水底不断冒出来的过程,因此称为冒泡排序。冒泡排序属于交换排序类,是一种稳定排序算法,其时间复杂度为O(n2)。二、算法介绍以下面的数组为例,对其使用冒泡法进行升序排序:901050803070406020遍历数组,比较相邻两个元素,若前一元素大于后一元素,则交换两个元素位置;每次遍历后,都会不断将最大、次大…的元素放置在数组末尾,循环n(数组原创 2021-08-02 15:17:12 · 437 阅读 · 0 评论 -
Python实现KMP算法-字符串匹配和查找
《大话数据结构》一书第五章介绍了字符串的定义、存储结构和模式匹配算法。关于模式匹配,重点介绍了暴力(Brute-Force)算法和KMP算法,暴力算法较为简单,但性能较低。KMP算法在暴力算法基础上,通过特别巧妙的方式,降低了字符串比较次数,将时间复杂度从O((n-m+1)*m)降低到了O(n+m)。但是!!!这本书中关于KMP算法的介绍冗长、混乱,讲解的不够透彻,只讲其一,不讲其二,非常不便于理解。在反复阅读和理解消化了几个小时后,发现对KMP算法还是不能了然于胸。因此在网上查阅了相关资料,个人感觉讲原创 2021-07-24 11:43:40 · 434 阅读 · 4 评论 -
Python基于链表结构实现链队列Queue
上一篇文章介绍了循环队列的顺序存储结构的实现,Python基于顺序结构实现循环队列Queue。本文参考《大话数据结构》4.13一节,基于链表结构实现了链队列。对于循环队列与链队列的比较,《大话数据结构》中有很好的介绍:对于循环队列与链队列的比较,可以从两方面来考虑:从时间上,其实它们的基本操作都是常数时间,即都为O(1)的,不过循环队列是事先申请好空间,使用期间不释放,而对于链队列,每次申请和释放结点也会存在一些时间开销,如果入队出队频繁,则两者还是有细微差异。对于空间上来说,循环队列必须有一原创 2021-07-18 11:41:58 · 418 阅读 · 0 评论 -
Python基于顺序结构实现循环队列Queue
参考《大话数据结构》4.12一节,基于顺序结构实现了循环队列。class SeqQueue(object): def __init__(self, size=10): self.MAXSIZE = size self.data = [' '] * size self.front = 0 # 头指针 self.rear = 0 # 尾指针 def __len__(self): return (self.re原创 2021-07-18 10:01:11 · 631 阅读 · 0 评论 -
Python下基于栈和逆波兰算法实现四则运算
参考《大话数据结构》一书4.9节,Python下基于栈和逆波兰算法实现四则运算。栈的实现使用顺序结构,即基于列表实现,参考本人博客Python实现顺序结构栈Sequence Stack中缀转换后缀采用逆波兰算法,参考本人博客Python利用栈将中缀表达式转换为后缀表达式(四则运算)。计算代码如下所示(transform函数见上述 2.Python利用栈将中缀表达式转换为后缀表达式(四则运算)):def arithmetic(expression): signs = '+-*/'原创 2021-07-17 22:51:26 · 389 阅读 · 0 评论 -
Python利用栈将中缀表达式转换为后缀表达式(四则运算)
参照《大话数据结构》一书4.9节,基于Python实现了中缀表达式到后缀表达式的转换。栈的实现使用顺序结构,即基于列表实现,与本人博客Python实现顺序结构栈Sequence Stack一致。class SeqStack(object): def __init__(self, size=10): self.__MAXSIZE = size # 将MAXSIZE定义为私有变量,禁止子类对象访问 self.__data = [' '] * size # 将dat原创 2021-07-17 21:36:19 · 771 阅读 · 0 评论 -
Python使用循环和递归实现斐波那契数列
基于Python实现斐波那契数列。方法一:使用循环,通过yield生成器返回结果,使用时通过list转换为列表。这种方法效率更高,占用空间较小;方法二:使用递归实现,效率很低,占用内存较高。n=40时,方法一耗时不足1s,方法二耗时68s。import timedef fib(n): a = 0 b = 1 for i in range(n): yield b a, b = b, a + bdef fib_recursive(n):原创 2021-07-17 19:30:41 · 2246 阅读 · 0 评论 -
Python实现链栈 Link Stack
"""Python实现链栈by 勤奋的清风 at 2021-07-17"""class Node(object): def __init__(self, value=None, next_node=None): self.value = value self.next = next_node def set_value(self, value): self.value = value def set_next(self,原创 2021-07-17 18:31:50 · 600 阅读 · 0 评论 -
Python实现顺序结构栈Sequence Stack
参考大话数据结构,利用Python3实现了栈的顺序结构。class SeqStack(object): def __init__(self, size=10, elem_type=int): self.__MAXSIZE = size # 将MAXSIZE定义为私有变量,禁止子类对象访问 self.type = elem_type self.__data = [elem_type] * size # 将data定义为私有变量,禁止子类对象访问原创 2021-07-17 13:04:28 · 271 阅读 · 0 评论 -
Python之可变对象作为函数参数问题
在阅读博客文章时,看到一道有趣的题目,代码运行结果和自己理解的不一样,触及到了我的Python知识盲区,说明对Python的一些基础概念理解的不够深刻。个人认为这个知识点较为重要,在数据分析、软件等开发项目中,若出现此类问题,很难排查Bug,因此对这个知识点进行了一番探索,将相关原理和现象说明清楚。问题说明题目出自参考资料[1]中的第四题。代码如下,请推断下述代码的输出结果。def f(x, l=[]): for i in range(x): l.append(i * i原创 2021-05-30 13:37:51 · 707 阅读 · 1 评论 -
Python软件项目打包——pyinstaller
说明本文主要针对于多文件打包,单文件打包不在本博客范围内。大型项目打包可参考本文。经本人测试,在win10系统下打包后的软件,无法在win7下运行。结合以往项目经验,若有跨平台需求,需要在不同平台下分别打包生成对应平台下的可执行文件,方可分发至不同平台用户。部分命令简介–distpath : 打包到哪个目录下-w: 指定生成 GUI 软件,也就是运行时不打开控制台-c: 运行时打开控制台-i : 指定打包后可执行文件的图标–clean: 在构建之前清理PyInstaller缓存并删除临时原创 2020-10-24 16:44:04 · 428 阅读 · 2 评论 -
Qt QGridlayout 布局比例-解决列宽不符合设定问题
在设定完QGridlayout布局内容后,将layout传入下述函数,即可实现行列宽高设定基本符合需求。 def gridLayoutSet(self, layout): # 设置每行每列比例一致 # 需设置每行每列最小宽度或高度,size需小于self.width() / layout.rowCount() rowSize = 100 colSize = 100 for row in range(layout.row原创 2020-09-08 11:12:49 · 7664 阅读 · 0 评论 -
fortran与python跨语言集成(f2py/gfortran)
软件开发项目,界面使用Python开发,基于性能和资源丰富程度考虑,数值计算部分用Fotran语言实现,然后通过Python调用,其中Fortran代码版本较杂,f77、f90、f95同时共存。目前有如下两种解决方案,由于项目时间较为紧张,最终暂采用了F2Py方案:1. 利用F2Py将Fortran代码编译为pyd格式,在Python中可以直接作为模块import;2. 利用gfortran或intel的编译工具,将Fortran代码编译为dll文件。原创 2020-09-08 11:11:12 · 3493 阅读 · 4 评论 -
Python统计项目代码的行数
功能统计Python、Java、C++等语言的项目内代码文件行数并输出。使用前需安装prettytable用于美化输出pip install prettytable代码# coding=utf-8import osimport sysimport prettytable as ptimport codecs# 指定想要统计的文件类型CPP_SUFFIX_SET = {'h', 'hpp', 'hxx', 'c', 'cpp', 'cc', 'cxx'}PYTHON_SUFFIX_S原创 2020-08-21 21:24:47 · 1067 阅读 · 2 评论 -
QT-GraphicScene大于GraphicView时,场景居中问题
使用环境:PySide2 + QT5.12.8 + Python3.7 + Windows10QT或者PyQt解决思路类似。问题描述:由于项目需要,场景需要较大的区域,因此初始化时,场景的面积大于视图窗口的面积,这种情况下,会出现滚动条,且软件会默认将视图聚焦与场景中间,而不是左上角,不符合通常的软件操作习惯,因此需要设置将视图窗口聚焦于场景左上角。解决方案:下述代码仅作参考,关键代码为self.graphView.centerOn(0, 0),通过这句代码将视图中心设置为左上角。from原创 2020-08-14 16:39:56 · 1837 阅读 · 1 评论 -
任意情况下Python获取文件所在目录路径
一常用做法是利用sys库,一般情况下也能得到预期结果,如下所示:import sysfolder_path = sys.path[0]但在某些情况下,上述方法会存在问题,比如在a文件中引用b文件,而两者不属于同一目录中时,在b文件中sys.path[0]路径则会出错。二下面贴上在任意情况下均能正确获得文件所在目录路径的代码:import osfolder_path = os.path.split(os.path.abspath(__file__))[0]以上,欢迎交流。...原创 2020-08-14 16:15:27 · 888 阅读 · 0 评论 -
Python项目文件引用问题:ImportError: attempted relative import with no known parent package
在做一个项目,采用包的形式进行文件组织,运行代码是会报错`ImportError: attempted relative import with no known parent package`,下面先贴出解决方案。原创 2020-07-22 12:21:51 · 126551 阅读 · 25 评论 -
PySide2/PyQt5 实现设置QDockWidget初始大小
尝试了QDockWidget自带的很多方法,发现无法在保证其可调整大小的情况下,设置其初始大小。当QDockWidget不需要支持调整大小时,可按照如下方法进行设置:# 非完整代码,仅供参考from PySide2.QtWidgets import QDockWidget, QMainWindowclass UIMainWindow(QMainWindow): def __init__(self, *args, **kwargs): super(UIMainWindow, s原创 2020-06-23 16:57:14 · 2742 阅读 · 0 评论 -
python利用mongodb上传图片数据 : GridFS 与 bson两种方式
利用mongodb保存图片通常有两种方法,一种是将图片数据转化为二进制作为字典的键值对进行保存,另一种是利用mongodb提供的GridFS进行保存,两者各有利弊。性能方面的优劣未曾测试,无法进行评价,此处仅对两种方式进行介绍,若有彻知者还望指教。 下面以如下数据作为示例进行介绍: 数据示例dic = { "owner_name" : "samssmilin", "ph原创 2018-02-06 15:53:01 · 7497 阅读 · 2 评论 -
python制作yolov2目标检测标注数据集
利用python制作yolov2目标检测数据集原创 2017-11-07 21:48:07 · 3721 阅读 · 0 评论 -
谷歌GDELT数据下载代码
在上一篇博客中,我对GDELT数据进行了说明,在这篇文档中直接上代码,有需要的可以直接使用并下载数据,有问题欢迎留言。GDELT提供了好几种数据,包括gkg、event、mentions等数据,我在代码中下载的是event数据,可以自己修改原始链接,代码应该可以通用,原理是一样的。#-*-coding:utf-8-*-import requestsfrom bs4 import Beautifu原创 2017-09-22 16:19:57 · 6949 阅读 · 36 评论 -
python下几种打开文件的方式(你习惯的不一定是最好的)
python下打开文件的几种方式,以及优先推荐使用的写法。原创 2017-08-03 16:03:44 · 72233 阅读 · 5 评论 -
ubuntu下安装selenium以及chromedriver、geckodriver和phantomjs等驱动
环境: 系统 : Ubuntu14.04 64位 谷歌浏览器版本 : chrome60 火狐浏览器版本 : firefox54做python爬虫,有些数据需要点击页面后才能获取到,因此需要使用selenium来进行一些操作。 selenium安装方法:pip install selenium一般来说,selenium用到的浏览器有三个,可视化的有界面的为chrome和firefox,无界面的原创 2017-08-16 20:34:17 · 9449 阅读 · 1 评论 -
python读取和存储dict()与.json格式文件
2018.3.7更新 : 优化了部分内容原来那篇是用另一个编辑器写的,写的代码看起来比较乱,效果很差,我自己看着都觉得很恶心,于是想要在markdown编辑器下重新编辑那篇博客,把格式问题解决了,但是csdn好像是不支持这样做,我在修改后只能当一篇新的博客发布… 就这样吧,这篇看着舒服多了,两篇重复的就重复了吧,不是我本意…一、读取.json格式文件并将数据保存到字典中:...原创 2017-08-02 08:42:31 · 9563 阅读 · 2 评论 -
python下解压缩zip文件并删除文件
利用python下载数据,下载下来的数据为zip格式,因为有上千个这样的文件,因此便直接在爬虫程序里加入了解压缩zip文件的内容,并且因为数据量较大,为了节省空间,便在解压缩后立即删除该zip文件。先来介绍解压缩的方法:import zipfilefilename = '/home/username/work/1.zip'fz = zipfile.ZipFile(filename, '...原创 2017-07-20 09:20:53 · 7216 阅读 · 4 评论 -
python处理中文字符串
使用tensorflow做聊天机器人时,处理数据时遇到一个问题,需要统计常用汉字,这样就需要读取中文字符串中的单个汉字并进行统计。而适用于英文字符串的方法并不适用于中文字符串,因此需要通过下述的方法来读取中文字符串中的单个汉字字符。s = '今天天气非常好hhh'for i in s.decode('utf-8'): print i, #结果:# 今 天 天 气 非 常 好 ...原创 2017-07-07 14:46:39 · 3494 阅读 · 1 评论 -
python利用百度API进行地理编码(将地名转换为经纬度信息)
更新时间:2018-3-28 更新内容:优化部分代码,添加mongodb部分的内容本文章通过讲解如何在百度地图API申请密钥,然后在python中调用API接口将自有数据中的地名转换为经纬度坐标。 运行环境: python3一、注册密钥在百度地图API上相关位置的展现是以经纬度为基础的。要使用百度地图接口需要注册百度地图API以获取免费的密钥,才能完全使用该AP...原创 2017-05-20 10:31:00 · 15245 阅读 · 7 评论 -
python读取和存储dict()与.json格式文件
这篇是不是用markdown格式写的,显示代码不太友好,csdn又不支持在原文上直接修改编辑格式,因此在markdown格式下重新将此文编辑了一遍,且內容有更新,点击即可 : http://blog.csdn.net/qq_23926575/article/details/76566209一、读取.json格式文件并将数据保存到字典中:{"商家名称": "珍滋味港式粥火锅(工体店)", "评分":...原创 2016-11-06 14:21:26 · 48751 阅读 · 2 评论 -
matplotlib设置中英文多种字体混合坐标轴名称
欢迎访问我的个人博客:马思夫的个人博客 以后有文章都会更新到个人博客中,个人博客中的功能可以自己设计,因此会更丰富点,界面也好看一些,且无广告,建议优先访问个人博客在利用matplotlib绘图时,常常需要添加图例与坐标轴名称,而在论文中,对中英文有严格的不同的字体要求,但默认的方法中(如下所示),无法分别为中文、英文指定不同字体(如下图),因此需要借助其他方法。# -*- co...原创 2018-05-07 22:08:28 · 19646 阅读 · 7 评论 -
灰度共生矩阵-python
本篇博客参考灰度共生矩阵(GLCM)附Python代码 ,对其进行了完善与修改。灰度共生矩阵(Gray Level Co-occurrence Matrix,GLCM)统计了灰度图中像素间的灰度值分布规律以区分不同的纹理。灰度共生矩阵中每个元素的值可以定义为(x, y)点与(x + dx, y + dy)点的值对为(i, j)的概率。统计整幅图像中每一种灰度值组合出现的概率矩阵 P 即...原创 2018-06-06 18:26:09 · 13491 阅读 · 28 评论 -
python下上传/下载各种格式文件到MongoDB数据库中
python中,支持通过GridFS使用MongoDB数据库提供的大文件存储功能,本文中通过这种方法将各种格式文件以二进制格式(测试了.pdf、.py格式文件)存入GridFS集合中。#-*-coding:utf-8-*-import osimport sysfrom gridfs import *from pymongo import MongoClientfrom datetime...原创 2019-07-24 17:21:54 · 2499 阅读 · 0 评论 -
Python下XML与JSON字符串互相转换
#-*-coding:utf-8-*-import xmltodictimport jsonimport osimport sysdef jsonToXML(json_str): '''传入字典字符串或字典,返回xml字符串''' xml_str = '' if type(json_str) == dict: dic = json_str ...原创 2019-07-04 22:14:06 · 3998 阅读 · 0 评论 -
python根据词频字典或字符串绘制词云图
由于工作需要,要根据现有的新闻数据统计词频,绘制词云图,比较擅长python,因此没有用可以生成云图的网页工具。由于我的数据量比较大,因此根据字符串自动进行统计并绘制云图的方式并不适合我。我需要手动从文件中读取数据并进行统计,然后将词频字典传入函数中进行绘制。参考资料:用Python实现一个词频统计(词云)图python(wordcloud包)之生成词云(英文语料)本文代码参考上述两个...原创 2018-12-27 17:06:39 · 12417 阅读 · 0 评论 -
python调用百度翻译、谷歌翻译
谷歌翻译不提供接口,想要使用谷歌的翻译结果,需要借用爬虫技术,将待翻译的文本传入,抓取页面,解析出翻译结果,经测试,这种方法的翻译效果较差,不建议使用。百度翻译提供接口,可在百度翻译注册开发者后获取appid与secretKey直接在python中进行调用,这种方法翻译效果较好,但仍存在一些问题,对于那些翻译不太好的文本,只能手动复制到谷歌翻译或必应翻译中进行翻译。#-*-coding:utf...原创 2018-11-21 16:03:23 · 2343 阅读 · 4 评论