python3
johnjim0816
stay hungry, stay foolish
展开
-
Python装饰器通俗理解
Python装饰器简单来讲就是用于扩展函数功能的一种工具,在扩展功能方面其与类的继承有些相似,都是为了提高代码的复用性。举个例子就是把孙悟空塞入炼丹炉,然后就出来一个还是会吃桃子会耍金箍棒,但是有火眼金睛的猴哥,只是多了特效技能,这就是为什么叫做装饰器的原因。与类的继承相比,其用途有所区别,并且降低了代码的耦合性(即类与类之间乱七八糟的关系导致整个代码体系臃肿的情形)。Python装饰器的应用场景有很多,其中一个很普遍的功能就是打印日志或者运行时间。{}{}{}......原创 2022-08-30 20:44:50 · 992 阅读 · 0 评论 -
Powershell下激活Conda
Windows通过exe安装Conda是默认激活cmd终端的,换句话说在cmd终端输入conda命令是有效的。但是Win10系统以后出现了一个比cmd更好用的终端,即Powershell,要想激活Powershell下的Conda,可以在安装之后记住安装路径,比如我的是。这样Powershell下就可以使用Conda命令了。,那么首先执行以下命令。原创 2022-08-22 22:14:17 · 1660 阅读 · 1 评论 -
matplotlib画中文图
代码如下,关键是增加chinese_font()即可,字体路径根据系统的情况改。import matplotlib.pyplot as pltimport seaborn as snsfrom matplotlib.font_manager import FontProperties # 导入字体模块def chinese_font(): ''' 设置中文字体 ''' return FontProperties(fname='/System/Library/Fonts/原创 2021-11-17 15:13:18 · 393 阅读 · 0 评论 -
拓扑排序Python实现
有向无环图拓扑排序是针对有向无环图(DAG, Directed Acyclic Graph)的,具有以下性质:如果这个图不是 DAG,那么它是没有拓扑序的;如果是 DAG,那么它至少有一个拓扑序;反之,如果它存在一个拓扑序,那么这个图必定是 DGA。拓扑排序对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边(u,v)∈E(G),则u在线性序列中出现在v之前。通常,这样的线性序列称为满足拓原创 2021-10-30 10:35:02 · 1879 阅读 · 0 评论 -
字典按值或按键排序
import collectionsdic = collections.defaultdict(int)dic[0] = 9dic[4] = 7dic[1] = 2tmp = sorted(dic.items(),key=lambda item:item[1]) # 按值排序print(dict(tmp)) # 输出 {1: 2, 4: 7, 0: 9}tmp = sorted(dic.items(),key=lambda item:item[0]) # 按键排序print(dict(tmp原创 2021-09-18 13:29:49 · 414 阅读 · 0 评论 -
defaultdict用法
指定默认值当字典不存在某个键时指定默认值,需结合lambda匿名函数:from collections import defaultdictdic = defaultdict(lambda: 0)print(dic[1]) # 输出 0注意需指定默认类型或者使用匿名函数。否则报错:from collections import defaultdictdic = defaultdict()print(dic[1]) # 报错 KeyError: 1嵌套字典做图相关的题目可能用到:fr原创 2021-09-17 22:48:29 · 437 阅读 · 0 评论 -
笔试编程题的输入输出(Python)
多行多组输入1res = []n = int(input()) # 首行输入一个数字确定行数for _ in range(n): # 确定行数直接for循环 try: # 不加try判断可能会出现EOF问题 line = input() # 输入就是input except: break a,b = line.split() # 一行多个数字即多组输入时,需要split res.append(int(a)+int(b)) # 记得类型原创 2021-09-11 15:06:44 · 2489 阅读 · 0 评论 -
matplotlib画图中文乱码问题
查来查去还是以下方法简单粗暴,并且容易迁移到别的机器上:from matplotlib.font_manager import FontPropertiesimport matplotlib.pyplot as pltdef chinese_font(): return FontProperties(fname='/System/Library/Fonts/PingFang.ttc',size=15) # 系统字体路径,此处是mac的plt.title(u'乘客等级分布', fontp原创 2021-09-10 16:01:44 · 203 阅读 · 0 评论 -
Python reduce函数
reduce函数语法如下:reduce(function, iterable[, initializer])该函数函数将一个可迭代对象(列表,集合等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。实例如下:from functools import reducedef add(x, y) : # 两数相加 re原创 2021-05-22 08:32:40 · 273 阅读 · 0 评论 -
520教你画朵玫瑰去表白!
代码:import turtleturtle.speed(5) #画笔移动的速度turtle.penup() #提起画笔,移动画笔但并不会绘制图形turtle.left(90) #逆时针转动画笔90度turtle.fd(200) turtle.pendown() #放下画笔,移动画笔即开始绘制turtle.right(90) turtle.pensize(2)#设置画笔的大小# 花蕊 turtle.fillcolor("red") #填充颜色turtle.begin_f原创 2021-05-20 12:07:26 · 271 阅读 · 3 评论 -
Python Counter计数器
Counter是collections模块的Counter类,可以创建空的Counter,也可以根据其他形式创建:c = Counter() # 创建一个空的Counter类c = Counter('gallahad') # 从一个可iterable对象(list、tuple、dict、字符串等)创建c = Counter({'a': 4, 'b': 2}) # 从一个字典对象创建c = Counter(a=4, b=2) # 从一组键值对创建常用方法c = Counter('gall原创 2021-05-18 14:22:40 · 295 阅读 · 0 评论 -
Python:反转二维数组的行和列
代码如下:import numpy as nparr=np.arange(12).reshape(4,3)print("原数组")print(arr)print("翻转行")print(arr[::-1])print("翻转列")print(arr[:,::-1])结果如下:原数组[[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]]翻转行[[ 9 10 11] [ 6 7 8] [ 3 4 5] [ 0 1 2]]翻原创 2021-01-29 11:26:42 · 4441 阅读 · 0 评论 -
PSO解非线性规划问题
使用pyswarm模块,代码如下,见注释:from pyswarm import psodef object_func(x): x1 = x[0] x2 = x[1] return x1**4 - 2*x2*x1**2 + x2**2 + x1**2 - 2*x1 + 5 # 求解最小值def cons(x): x1 = x[0] x2 = x[1] con1 = -(x1 + 0.25)**2 + 0.75*x2 # con1>=0原创 2021-01-29 01:13:15 · 901 阅读 · 0 评论 -
Pandas遍历数据集时间对比(for和apply)
主要参考知乎:Pandas 中如何遍历数据集(for 循环和 apply 函数对比,本篇文章并没有做一个速度对比,因此这里简单试验一下,有时间补上全部的相关理论。本次试验采用的csv是各年强化学习论文统计,总共4000+条目,测试环境是2019 16寸MacBookPro I7版,Python3.7。代码如下:#!/usr/bin/env python# coding=utf-8'''Author: JohnEmail: johnjim0816@gmail.comDate: 2021-01-原创 2021-01-25 18:50:51 · 1125 阅读 · 0 评论 -
三种查找字符串方法的速度比较
查找字符串A是否包含子串B有三种方法,如下:from timeit import timeitimport redef find(string, text): if string.find(text) > -1: passdef re_find(string, text): if re.match(text, string): passdef best_find(string, text): if text in string:原创 2021-01-12 14:48:07 · 1553 阅读 · 0 评论 -
__slots__简介
__slots__是python中关于类的一个比较高级的用法,用于绑定大量类的实例属性。一般python类的属性是用__dict__表示的,这样耗费时间又消耗内存,使用__slots__只为固定的一些属性分配空间,因此能够提高效率和减少memory需求,如下:from timeit import repeatclass A(object): passclass B(object): __slots__ = ('x')def get_set_del_fn(obj): def get_set_d原创 2020-12-23 13:11:33 · 839 阅读 · 0 评论 -
坐标快速转距离矩阵
给定若干个点如何转换成距离矩阵,最简单粗暴的方法就是依次计算出各个点彼此间的距离然后填到矩阵中,参考练习题记录:求解距离矩阵,首先生成一百个二维坐标点,计算任意两个坐标点的距离。但是我们可以利用python中的scipy模块快速转换,如下:from scipy.spatial.distance import cdistcoords = [(35.0456, -85.2672), (35.1174, -89.9711), (35.9728, -83.9422),原创 2020-12-04 10:26:13 · 2675 阅读 · 2 评论 -
python中的全局,局部与非局部变量
本文将简介全局变量(Global variables), 局部变量(Local variables),以及非局部变量Nonlocal variables以及它们的用法全局变量顾名思义,全局变量能够作用于整个py脚本中,包括函数内部和外部,如下:x = "global"def fun(): print("x inside:", x)fun()print("x outside:", x)结果输出为:x inside: globalx outside: global但是有时会发原创 2020-08-31 16:35:17 · 1170 阅读 · 0 评论 -
ubuntu18.04安装python3.7
ubuntu18.04自带python3.6.9,如果需要安装python3.7则要另外安装,下面以python3.7.5为例,先执行所有升级sudo apt updatesudo apt upgrade安装编译python源程序所需要的包否则可能会出现zlib not available等错误,sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsql原创 2020-08-25 18:05:39 · 2805 阅读 · 0 评论 -
聊聊python类中的self
在学习python类的时候会发现几乎无一例外的会传入参数self,self到底是什么呢?其实self代表类的实例如下:class Test: def prt(self): print(self) print(self.__class__) t = Test()t.prt()结果为<__main__.Test object at 0x104b6d410><class '__main__.Test'>也可以直接在类中保存se原创 2020-07-11 22:52:33 · 375 阅读 · 0 评论 -
python类中super()与__init__()
子类继承的初始化规则首先需要说明关于类继承方面的初始函数__init__():如果子类没有定义自己的初始化函数,父类的初始化函数会被默认调用,但是需要在实例化子类的对象时传入父类初始化函数对应的参数如果子类定义了自己的初始化函数,而在子类中没有显式调用父类的初始化函数,则父类的属性不会被初始化,如果子类定义了自己的初始化函数,在子类中显示调用父类,子类和父类的属性都会被初始化对于情况1,如下:class Base: def __init__(self, name, id = 2):原创 2020-07-10 20:23:34 · 1104 阅读 · 1 评论 -
记录15个提升码速的python小技巧
小伙伴们,是不是每次在写python的时候都苦于只会写一些笨重的代码有时不得不借助万能的搜索引擎呢?我也是!话不多说,下面为大家带来一些提升码速的小技巧吧。1 交换值x, y = 1, 2print(x, y) # 1 2x, y = y, xprint(x, y) # 2 1如上可以在同一个赋值符号下赋予多个值,并且他们是同时进行的,而传统的交换一般需要借助一个tmp,如下tmp=xx=y # y赋值给x之后x就改变了,所以需要事先存一个tmpt=tmp2 list转string原创 2020-07-05 16:04:26 · 340 阅读 · 0 评论 -
python中的类型提示(type hint)
在刷leetcode或者一些官方源码的时候,经常看到如下字样:class Solution: def sortList(self, head: ListNode) -> ListNode:这就是类型提示(type hint),下面来个简单的例子,def greeting(name: str) -> str: return 'Hello ' + name如上,其中name是传入的参数,而:右边的str则是name期望的类型即str,而->则指向期望函数的返回类型。原创 2020-07-03 21:38:28 · 5775 阅读 · 0 评论 -
图解python归并排序
基本思想归并排序(merge-sort)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案合并在一起,即分而治之)。分治类似于二分的思想,打个不恰当的比喻,我们知道常见的冒泡,简单插入排序的时间复杂度都是O(n2)O(n^2)O(n2),并且如果原数组的有序程度越高,这些简单排序的实际时间复杂度就会越小。对于一个长度为nnn的无序数组,如果一分为原创 2020-07-03 11:51:50 · 372 阅读 · 0 评论 -
tqdm简介及使用方法
tqdm源自阿拉伯语 taqaddum (تقدّم) ,意思是进程( “progress”),也是西班牙语中 “I love you so much” (te quiero demasiado)的缩写,听着就浪漫~。该模块的作用就是使循环(loop)过程展示一个进度条,能够通过装饰tqdm(iterable)任何可迭代的对象,比如列表(list)。如下:from tqdm import tqdmfor i in tqdm(range(10000)): ...结果显示如下:又比如:原创 2020-06-30 20:46:39 · 3110 阅读 · 0 评论 -
python中continue,break和pass的区别
continue和循环语句和条件语句配合使用。当执行continue语句时,则跳出本次循环,不再执行本次循环剩下的其他语句。如下:var = 5 while var > 0: var = var -1 if var == 3: continue print('当前变量值 :', var)结果为:当前变量值 : 4当前变量值 : 2当前变量值 : 1当前变量值 : 0break不能够单原创 2020-06-30 09:19:51 · 865 阅读 · 0 评论 -
什么?贝塞尔曲线竟然可以用来描摹心仪的小姐姐!
什么是贝塞尔曲线? 贝塞尔曲线于 1962 年,由法国工程师皮埃尔·贝济埃(Pierre Bézier)所广泛发表,他运用贝塞尔曲线来为汽车的主体进行设计,贝塞尔曲线最初由保尔·德·卡斯特里奥于1959年运用德卡斯特里奥算法开发,以稳定数值的方法求出贝塞尔曲线。 贝塞尔曲线具有很多特殊的性质,在一些领域比如图形设计中应用十分广泛,贝塞尔曲线完全由其控制点决定其形状, n个控制点对应着n-1阶的贝塞尔曲线,并且可以通过递归的方式来绘制。一阶曲线一阶曲线很好理解, 就是根据t来的线性插值. P原创 2020-06-18 18:40:50 · 839 阅读 · 0 评论 -
使用seaborn绘制强化学习中的图片
seaborn可以说是matplotlib的升级版,使用seaborn绘制折线图时参数数据可以传递ndarray或者pandas,方便又好看!本篇用绘制强化学习中的rewards举例,实际上也可以用来机器学习中的loss曲线,原理类似。从一个简单示例开始import matplotlib.pyplot as pltimport numpy as npimport seaborn as sns # 导入模块sns.set() # 设置美化参数,一般默认就好rewards = np.array([原创 2020-06-12 16:36:10 · 3286 阅读 · 13 评论 -
python数组添加整行或整列
代码如下,见注释:import numpy as npm_list=[[1,2,3],[3,4,5]]m_arr=np.array(m_list) # 转为数组print(np.append(m_arr,[[1,1,1]],axis=0)) # 添加整行元素print(np.append(m_arr,[[1],[1]],axis=1)) # 添加整列ones_row=np.ones(len(m_arr[0]),int) # 生成全为1的一维列表,即【1,1,1】print(np.append(原创 2020-06-07 13:10:07 · 5007 阅读 · 0 评论 -
python的列表,数组和矩阵
理论python列表与numpy数组的区别使用Python列表可以存储一维数组,通过列表的嵌套可以实现多维数组。而numpy使用ndarray对象来处理多维数组,该对象是一个快速而灵活的大数据容器,存储效率和输入输出性能远优于Python中的嵌套列表。通常Numpy数组中的所有元素的类型都是相同的,而Python列表中的元素类型是任意的,因此在通用性能方面Numpy数组不及Python列表,但在科学计算中使用方面要比Python列表简单的多。Numpy数组和矩阵的区别矩阵必须是二维的,而数组可以是原创 2020-06-06 18:35:21 · 3226 阅读 · 0 评论 -
python3抠图并更换背景
继上次博客opencv入门之RGB转HSV并更换背景手动抠图之后,今天偶然看到这篇博客利用了百度的paddlepaddle平台实现AI抠图,这就是所谓的“大人,时代变了!”。于是使用本人上次博客的图片,如下安装之后运行以下代码(图片存入当前目录的figs文件夹中):import os, paddlehub as hubhumanseg = hub.Module(name='deeplab...原创 2020-04-03 20:36:32 · 2241 阅读 · 0 评论 -
python中获取当前以及上级路径
测试环境python3.7.7正文__file__表示当前.py文件的路径os.path.dirname(__file__)表示当前.py文件所在文件夹的路径os.path.dirname(os.path.dirname(__file__))表示上级目录os.path.dirname(os.path.dirname(os.path.dirname(__file__)))则表示上上级目录注意,__file__在jupyter notebook中无效。os.path.abspath('.')表示原创 2020-05-24 20:57:49 · 1306 阅读 · 0 评论 -
深入了解import声明
import声明即用于导入模块,比如import numpy as np,但是涉及复杂工程目录时容易搞得稀里糊涂,于是我专门使用了python3.7来测试并解决import相关问题。基本定义module:即模块,也就是中各种.py文件,模块名就是文件名built-in-module:即内置模块,就是在安装python的时候系统编译在python解释器中的,比如numpypackage:任何包含__init__.py文件的文件夹就是一个package。注意根据python document原创 2020-05-23 14:36:09 · 737 阅读 · 1 评论 -
希尔排序Python实战
思想导引希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法,它是基于简单插入排序的改进版本,也称为递减增量排序算法。在食用本文之前可以先简单了解一下插入排序的原理。我们都知道插入排序的时间复杂度是O(n2)O(n^2)O(n2),比如对于一个长度为8的序列,它的时间复杂度对于插入排序来说就是O(82=64)O(8^2=64)O(82=64)。但是需要注意的是实际上...原创 2020-04-20 10:52:23 · 433 阅读 · 0 评论 -
栈应用之括号匹配问题
问题描述括号匹配问题,即给定一段文本text,括号是否有正确匹配的问题。括号由一个开括号如"(“和一个闭括号”)“组成,相互对应。这里只考虑三种括号,即”()","[]","{}"。此外括号括起的片段,也可能会嵌套。解决思路这样就不难总结出检查括号配对的原则:从左到右遍历text时,遇到的闭括号应该与最近遇到的且尚未匹配的开括号配对。由于括号的出现可能嵌套,需要逐对匹配,即当前闭括号应该与...原创 2020-04-09 09:42:15 · 765 阅读 · 0 评论 -
为什么要在python文件头声明编码方式?
在写python时,有时会在文件头声明编码方式,如下:# -*- coding: utf-8 -*-有时又没有,似乎写不写都没关系。但实际上这样的想法是不行的,即便你没有上面的声明,Python将默认为ASCII标准编码,对python解释器来说两者相同,但对编辑器来说,就可能出现识别不了的问题。官方文档PEP 263是这么描述的:在Python 2.1中,只能使用基于Latin-1的...原创 2020-04-06 11:10:17 · 1561 阅读 · 0 评论 -
一道小题加深对栈后进先出的理解(python)
今天有人问了我一道题,如下:意思就是给定一个顺序为654321的栈,判断下面的栈是否是正确的。解题思路栈的元素存储与利用是遵循后进先出(LIFO)的,如下图,我们可以用一个半开口的方框表示栈,开口的一端称为栈顶,就是这端进行着压栈(push)和出栈(pop)操作。对于给定的待判断序列,比如这里的A选项453126,我们可以依次按照这个序列的顺序进行推演,首先是第一个元素4,我们可以...原创 2020-03-30 21:16:47 · 697 阅读 · 0 评论 -
【数据结构】使用python从三个角度解决josephus问题
文章目录0 写在前面1 基于数组概念的解法2 基于顺序表的解法2 基于循环单链表的解法0 写在前面josephus问题是数据结构教材中的一个常见实例,其问题可以描述为:设nnn个人围坐一圈,现在要求从第kkk个人开始报数,报到第mmm个的人退出。然后从下一个人开始继续按照同样规则报数并退出,直到所有人退出为止。要求按照顺序输出每个人的序列号。1 基于数组概念的解法首先考虑基于pyth...原创 2020-03-25 10:55:14 · 829 阅读 · 0 评论 -
python中end=" "的含义
一般出现在print()函数中,如print(a,end=" “)。这是因为print默认是打印一行,结尾加换行。end=” "的意思是为末尾end传递一个空字符串。如下:print(",")print(1)print(",")结果显示:,1,加了end之后:print(end=",")print(end="1")print(",")结果显示:,1,...原创 2020-03-24 20:52:59 · 35841 阅读 · 1 评论 -
20行Python代码爬取王者荣耀全英雄皮肤改进版
0 写在前面看了大神的这篇CSDN:20行Python代码爬取王者荣耀全英雄皮肤访问量那么高,忍不住想要蹭一下热点,但是蹭归蹭,总得有点货才行,于是我品我细品,发现其代码总体有三点我觉得值得改进的地方:其创建文件夹的路径为绝对路径,不适合所有个人电脑和系统最后写出的每个皮肤名字为序号,常理说来能够命名为“鲁班七号-电玩小子.jpg"这样更为直观代码中的一些变量比如i,j影响代码理解,还有...原创 2020-02-20 19:22:57 · 1652 阅读 · 2 评论