python
Jaster_wisdom
程序员
展开
-
python 爬取网页中的图片到本地
最近在学习python,顺便写一个爬取网页中图片的程序练练手。主要分为两个过程:第一,从给定域名的网页中爬取图片的链接第二,读取链接对应的图片,保存到本地第一个过程需要导入utllib包,在python2.7环境下使用 import urllib2 即可在python3.X 之后的版本中,由于没有了urllib2模块,所以导入的是 import urllib.reque原创 2016-10-15 21:13:23 · 17669 阅读 · 6 评论 -
LeetCode22. 括号生成
题目大意:给定n表示括号的对数,输出所有有效的括号的组合题目分析:递归求解,用leftnum和rightnum分别表示剩余可用的左括号和右括号的个数,当使用了一个( ,则leftnum-1; 同理,使用了一个 ),则rightnum-1。 当leftnum>0时,可用( 填充; 当leftnum<rightnum,并且rightnum>0时,表示当前可用 )填充,直到leftnu...原创 2018-06-05 20:43:32 · 525 阅读 · 0 评论 -
LeetCode18. 四数之和
题目大意:在一个数字序列中找出不重复的四个元素,使得它们的和等于目标值target题目分析:本题和LeetCode15 三数之和思路基本相同,只要设置两重循环,先固定前两个数,后两个数的话,只要分别用两个指针指向剩余元素的一头一尾,若当前的和比target大,则后面的指针前移;若当前的和比target小,则前面的指针后移;相等的话,就保存一下。因为结果不能有重复,所有在多处需要去重。去重的思路和L...原创 2018-06-05 21:32:13 · 521 阅读 · 0 评论 -
Leetcode17. 电话号码的字母组合
题目大意:将给定的一个仅包含数字2~9的字符串 按照电话九宫格上数字与字母的对应关系 输出所有可能的字母组合题目分析:本题的难点在于数字字符串的长度是个变量,若是一个固定的几位数,那么就可以写几重循环,依次输出即可。我的解题思路是:首先将字符串中的每个数字对应成一个字母列表,按顺序将各个字母列表放在一个列表中,比如“23”,就可以转换为[["a","b","c"],["d","e","f"原创 2018-05-30 13:05:34 · 2889 阅读 · 0 评论 -
LeetCode39. 组合总和
题目大意:给定一个数组和一个目标值,返回数组内可以使数字和为target的组合,注意数组内的数字可以重复选,但是组合的结果要求不能重复。题目分析:本题采用递归较容易解答。首先,将数组内的元素由小到大排序,然后不断地进行试探,直到和为target。若当前和小于target,则继续往里面加元素;若当前和等于target,就可以将结果保留下来;若当前和已经大于target,那就可以排除掉这种情况,回溯到...原创 2018-06-13 19:31:59 · 3416 阅读 · 3 评论 -
LeetCode40. 组合总和II
题目大意:给定一个数组,和一个目标值,找出数组中所有可以使数字和为target的组合。数组中的数字可以重复,并且每个元素只能使用一次。题目分析:本题和LeetCode39. 组合总和很类似,唯一的区别在于每个元素不能无限制地取。所以我们只要在递归的时候将参数改成从后一个元素开始递归。同时,同一位置上的元素不能重复,例如说,有一种情况是(?,?,?,?),表示有四个元素的组合情况,其中第一位置上的?...原创 2018-06-13 20:11:40 · 1458 阅读 · 0 评论 -
LeetCode55. 跳跃游戏
题目大意:判断是否可以从数组的第一个位置调到最后一个位置,每次跳得步数必须小于等于当前位置上的值题目分析:使用贪心算法,每次选择最远能达到的地方,假设从某一点最远可以到达A点,那么A点之前的所有点都是可以到达的。所以我们只要不断的更新最远可达到的点,然后看是否最远的点超过了终点即可。具体来说,就是根据A点之前所有的点加上其最远的距离,求它们的一个最大值,求到一个reach之后,迭代地求最大值即可。...原创 2018-06-14 19:48:20 · 727 阅读 · 0 评论 -
Leetcode34. 搜索范围
题目大意:给定一个升序的整型数组和一个目标值,找到这个目标值在数组中的开始和结束的位置题目分析:本题使用二分查找的思想,不断地取中间元素,比较它和目标值的大小。若中间元素的值比目标值小,则在后面的部分查找;若比目标值大,则在前面的部分查找。若相等,则在该中间元素前后试探是否还有和目标值相等的元素,最后返回这个区间代码展示:class Solution(object): def search...原创 2018-06-09 20:44:50 · 412 阅读 · 0 评论 -
Leetcode33. 搜索旋转排序数组
题目大意:返回旋转排序数组中的值等于目标值的元素的索引题目分析:使用二分法查找。根据旋转数组的性质,将这个数组从中间切开,前后两个子数组必定有一个是按照升序排列的,我们在升序的子数组中判断是否存在等于目标值的元素,若没有,则在另一个部分查找。代码展示:class Solution(object): def search(self, nums, target): ...原创 2018-06-09 21:26:03 · 1154 阅读 · 0 评论 -
Leetcode28. 实现strStr()
题目大意:实现字符串匹配函数,即在文本串S中查找一个模式串P的出现位置,若不出现返回-1题目分析:暴力解法,将模式串P与文本串S一位一位的比较,若相同,则继续比较下一位;若不同,则将模式串P向后移动一位,继续往后比较。时间复杂度为O(m*n),假设文本串S的长度为m,模式串P的长度为n。代码展示:class Solution(object): def strStr(self, haysta...原创 2018-06-10 10:34:52 · 540 阅读 · 0 评论 -
LeetCode50. Pow(x,n)
题目大意:实现一个计算机中求指数幂的操作。题目分析:我觉得这道题是不需要考虑大数问题的,因为如果幂取到2^30的级别,底数取2的话,这个结果是无法用float或double表示的。本题在计算过程中需要优化,常规的解法会出现内存不够的情况。我们知道,求a的n次方,可以用以下公式来表示:当n为偶数时,就是第一种情况;当n为奇数时,是第二种情况。同时,可以用n>>1位操作代替除以2,效率更高...原创 2018-06-10 12:40:56 · 245 阅读 · 0 评论 -
Leetcode46. 全排列
题目大意:求出一个序列的全排列题目分析:全排列问题都可以用递归的方式来解决,将第一个数分别与后面的每一个数交换,然后对后面的数进行全排列。全排列问题的模板如下:#include <iostream>using namespace std;void Perm(char s[], int m,int n){ if(m==n){ for(int i=0;i<...原创 2018-06-10 22:01:36 · 802 阅读 · 1 评论 -
k-means算法及python实现
本篇文章主要讲解聚类分析中的一种常用的算法k-means,它的全称叫作k均值算法。k-means原理k-means算法是一种基于原型的、划分的聚类技术。基于原型可以理解为基于质心,也就是说,每个对象到定义该簇质心的距离比到其他簇质心的距离更近。当质心没有意义时,原型可以视为最靠近中心的点。当然,还有其它的基于图的、基于密度的、基于概念的簇。基于划分的意思是,可以将数据对象集合划分成...原创 2018-08-09 15:28:56 · 2543 阅读 · 0 评论 -
Leetcode21. 合并两个有序的链表
题目大意:给定两个有序的链表,要求给出合并之后的一个链表题目分析:鉴于两个链表是有序的,用两个指针分别指向各自第一个元素,将其中小的那个元素作为新链表的第一个元素,同时将指向较小元素的指针后移一格,直到指向两个链表的末尾。若有一个链表已经到了末尾,直接将另一个链表的元素添加进来即可。代码展示:class Solution: def mergeTwoLists(self, l1, l2):...原创 2018-06-05 19:58:14 · 711 阅读 · 0 评论 -
LeetCode53. 最大子序和 (动态规划/分治法)
题目大意:求出一个序列的最大子序和,顾名思义,就是一段最大的连续序列的和题目分析:本题可以用两种解法求解,动态规划或分治法法一:动态规划,用result[i]保存以数字nums[i]结尾的最大子序和,然后不断更新result数组的最大值即可。时间复杂度O(n)代码展示:class Solution(object): def maxSubArray(self, nums): ...原创 2018-06-12 10:43:31 · 6091 阅读 · 2 评论 -
LeetCode41. 缺失的第一个正数
题目大意:找到一个未排序序列中的第一个缺失的正数。简而言之,就是看1在不在这个序列中,如果不在的话输出1;否则看2在不在这个序列中,如果不在的话输出2;否则看3在不在这个序列中……题目分析:本题的难点在于只能使用常数级别的空间,也就是说,不能开辟一个flag数组,若出现某个数,就将flag值标1,最后看flag数组第一个为0的下标。本题的思路是从前往后将数放到它正确的位置上去。举个例子,假设有序列...原创 2018-06-12 09:23:15 · 3819 阅读 · 3 评论 -
Python基础知识详解(数据类型、函数、包)
1.首先要注意的是:在Python中,首行不能有空格,因为Python对缩进要求严格2.十六进制用Ox前缀和0-9,a-f表示3.布尔值是True、False两种值(请注意大小写)4.空值None是Python里一个特殊的值5.for i in range(1,100): x++6.字符串可以用' ' 或 “ ”括起来原创 2016-11-30 11:45:45 · 953 阅读 · 0 评论 -
Python 面向对象、继承部分、正则表达式
1.初始化实例属性def __int__(self,name,gender,birth): self.name = name self.gender = gender self.birth = birthdef __int__(self,**kw): for k,v in kw.iteritems():原创 2016-11-30 12:31:55 · 524 阅读 · 0 评论 -
python中 Jupter的使用 notebook
安装Python环境 首选anaconda 可以一站式打包好所有的环境和第三方库安装完之后,会自带几个IDE。spyder和Ipython notebook/又称为 Jupter notebook这里首选使用Ipython notebook启动命令行 ipython notebooknotebook 使用快捷键执行当前cell,并自动跳到下一转载 2017-07-17 17:25:38 · 17416 阅读 · 0 评论 -
Python中安装Beautiful Soup成功后出现No module named 'bs4'
此篇文章主要用来解决在终端中完成了beautiful soup的成功安装,但是在IDLE中依然出现以下错误:>>>from bs4 import BeautifulSoupTraceback (most recent call last): File "",line 1,in from bs4 import BeautifulSoupImportEr原创 2017-07-26 20:08:47 · 32528 阅读 · 5 评论 -
MNIST识别数字(TensorFlow框架)
本篇文章主要实现在TensorFlow平台下识别MNIST数据集上的0-9十个数字,通过随机梯度下降算法优化参数,准确率在30000次迭代后保持在98.4%。 下面是完整的代码: '''MNIST数字识别问题'''import tensorflow as tffrom tensorflow.examples.tutorials.mnist import input_da原创 2017-09-25 09:39:37 · 857 阅读 · 0 评论 -
训练神经网络的简单例子(TensorFlow平台下Python实现)
本篇文章主要通过一个简单的例子来实现神经网络。训练数据是随机产生的模拟数据集,解决二分类问题。下面我们首先说一下,训练神经网络的一般过程:1.定义神经网络的结构和前向传播的输出结果2.定义损失函数以及反向传播优化的算法3.生成会话(Session)并且在训练数据上反复运行反向传播优化算法要记住的一点是,无论神经网络的结构如何变化,以上三个步骤是不会改变的。 完整代码如原创 2017-09-18 14:19:54 · 22781 阅读 · 4 评论 -
k-近邻算法 Python实现
首先讲,什么是k-近邻算法?k-近邻算法是一种有监督学习方法,即训练样本中的每个样本的类别标签都是已知的。对于一个新来的样本,我们将它的特征与训练样本集中的每个样本进行特征比较,然后算出与该样本最相似的k个样本,利用投票法,将k个样本中类别出现次数最多的那个类作为新来样本的类别。特别地,当k=1时,k-近邻算法就简化为最近邻分类算法。其中刻画相似性的度量方法有:欧氏距离、曼哈顿距离、切比雪夫距离、...原创 2018-03-19 21:24:53 · 320 阅读 · 0 评论 -
leetcode15. 三数之和
题目大意:求出集合中三个元素之和等于0,并且无重复的三元组题目分析:本题直接用暴力搜索来枚举所有情况,时间复杂度为O(n^3),超时下面使用第二种方法,时间复杂度降到O(n^2):它的思路是先将集合中的元素从小到大排序,然后确定三元组中的第一个元素为集合中的第一个元素,然后用指针j,k分别指向第二个元素和最后一个元素。若此时i+j+k=0,表示是符合条件的一种情况。若i+j+k>0,则表示现...原创 2018-04-19 23:12:16 · 882 阅读 · 0 评论 -
leetcode13. 罗马数字转整数
题目大意:将一个字符串表示的罗马数字转化成整数输出题目分析:从前往后扫描罗马数字,根据相应的键值对将每个字母表示的值相加即可。这里有两种情况:1.罗马数字中大的数字在小的数字的左边,这是正常的情况,只要将当前值累加到result中即可。 2.罗马数字中大的数字在小的数字的右边,只要将大的数字表示的值减去小的数字表示的值,将差值累加到result中。同时,指针向后移动两个位置即可。代码展示:clas...原创 2018-05-25 09:25:14 · 270 阅读 · 0 评论 -
Leetcode16. 最接近的三数之和
题目大意:找nums数组中的三个数,使它们的和最接近目标值target,并且只有一组解。题目分析:首先想到的是暴力解法,遍历出所有从数组中取不同的三个数的情况,比较它们与target的距离(可以用绝对值表示),然后将距离最小的一组的和输出即可。这种方法是超时的,简单分析一下,可以知道时间复杂度为O(n^3). 通过分析,我们可以想到一种时间复杂度为O(n^2)的解法:假设数组中有len个元素,首先...原创 2018-05-27 14:22:34 · 2984 阅读 · 0 评论 -
LeetCode47. 全排列 II
题目大意:给定一个含有重复元素的序列,返回这个序列所有不重复的全排列题目分析:与最基本的全排列递归算法相比,本题要对重复的元素进行特别的处理。例如序列“112”,第一个1和第二个1就不需要交换了,因为交换前后排列的序列是重复的。例如序列“211”,当“2”与第一个“1”交换了之后,变成第一个数字是1,后两个数12全排列。这种情况和“2”与第二个“1”交换了之后的情形是一样的。简而言之,只要要处理数...原创 2018-06-11 15:46:13 · 600 阅读 · 0 评论 -
LeetCode12. 整数转罗马数字
题目大意:将一个1到3999范围内的整数转为罗马数字题目分析:首先熟悉转换规则,然后可以使用两个list存储对应的映射关系,然后每次从大到小看num是否大于1000,大于900,大于500,若在某个区间的话,就将罗马数字加进来,num减去相应的数值,直到num为0代码展示:class Solution(object): def intToRoman(self, num): ...原创 2018-06-11 20:10:26 · 763 阅读 · 1 评论 -
Python语言实现批量视频分帧,保存视频帧
本篇博客介绍利用python脚本实现视频分帧,并将每一帧保存到本地。主要基于opencv包来实现,在运行代码前确保opencv包已正确安装。下面是主要代码:import os import cv2videos_src_path = '/home/shao/violence_detection_code/Movies_Dataset/fights'videos_save_pat...原创 2019-03-18 11:25:30 · 4807 阅读 · 10 评论