python算法

python全栈开发学习模块一(笔记4)

非 Y 不嫁゛ 提交于 2020-03-01 08:39:43
基本数据类型-列表 定义:[]内以逗号分隔,按照索引,存放各种数据类型,每个位置代表一个元素 特性: 1.可存放多个值 2.按照从左到右的顺序定义列表元素,下标从0开始顺序访问,有序 3.可修改指定索引位置对应的值,可变 列表的创建 list_test=[‘张三‘,‘李四’,'alex'] #或 list_test=list('alex') #或 list_test=list([‘张三‘,‘李四’,'alex']) 列表常用操作 ●索引 ●切片 ●append ●remove ●pop ●len() ●for ... in ... BIF-range() range(start, stop[, step]) -> range object 利用BIF中的range(),可以创建一个包含1-100数字的列表 >>> range(1,100) #[1,100)包括1不包括100 range(1, 100) >>> list(range(1,100)) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45

PYTHON数据结构与算法学习笔记(四)

半腔热情 提交于 2020-03-01 02:31:48
目录 栈 栈结构实现 队列 队列的实现 双端队列 双端队列的实现 栈 栈(stack),也称堆栈,是一种容器,可存入数据元素、访问元素、删除元素,它的特点在于只能允许在容器的一端(称为栈顶端指标,英语:top)进行加入数据(英语:push)和输出数据(英语:pop)的运算。没有了位置概念,保证任何时候可以访问、删除的元素都是此前最后存入的那个元素,确定了一种默认的访问顺序。 由于栈数据结构只允许在一端进行操作,因而按照后进先出(LIFO, Last In First Out)的原理运作。 栈结构实现 栈可以用顺序表实现,也可以用链表实现。 栈的操作 Stack() 创建一个新的空栈; push(item) 添加一个新的元素item到栈顶; pop() 弹出栈顶元素; peek() 返回栈顶元素; is_empty() 判断栈是否为空; size() 返回栈的元素个数。 这里使用顺序表(即python中的list)举例 class Stack ( object ) : def __init__ ( self ) : self . items = [ ] 1、 push(item) 添加一个新的元素item到栈顶 def push ( self , item ) : self . items . append ( item ) 2、 pop() 弹出栈顶元素 def pop (

Python数据结构与算法(一)

▼魔方 西西 提交于 2020-03-01 02:26:31
Python数据结构与算法(一) 引 入 题目:如果a+b+c=1000且a^2+ b^2 =c^2,求出a,b,c可能组合。 方式一: import time start_time = time . time ( ) for a in range ( 0 , 1001 ) : for b in range ( 0 , 1001 ) : for c in range ( 0 , 1001 ) : if ( ( a + b + c ) == 1000 ) and ( a ** 2 + b ** 2 == c ** 2 ) : print ( 'a={},b={},c={}' . format ( a , b , c ) ) end_time = time . time ( ) print ( end_time - start_time ) print ( 'over' ) a=0,b=500,c=500 a=200,b=375,c=425 a=375,b=200,c=425 a=500,b=0,c=500 227.9280366897583 over 方式二: import time start_time = time . time ( ) for a in range ( 0 , 1001 ) : for b in range ( 0 , 1001 ) : c = 1000 - a

python手写十大经典排序算法 一.冒泡排序法

半腔热情 提交于 2020-02-29 19:30:06
冒泡排序 (1)实现步骤 1.比较相邻两个元素,如果第一个比第二个大就交换对应位置 2.对每一对相邻元素作同样的操作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。 3.针对所有的元素重复以上的步骤,除了最后一个。 4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。 (2)动画演示 (3)手撸代码 老铁看图,我在给您亲自捋一遍,如何用python实现冒泡排序.首先循环嵌套是跑不了,外层循环是用来控制运行次数,内层循环是实现,相邻两个位置上数的大小比较. lst = [ 5 , 9 , 4 , 8 , 7 ] # 设置一个待排序的数列 for i in range ( len ( lst ) ) : # 第一层循环:控制次数 for j in range ( len ( lst ) - 1 - i ) : # 第二次循环:实现相邻位置比大小,交换的功能 if lst [ j ] > lst [ j + 1 ] : lst [ j ] , lst [ j + 1 ] = lst [ j + 1 ] , lst [ j ] ```python 在这里插入代码片 (4)优化 如果说对于一个lst这种的,正好符合顺序,而常规操作,依旧是对他进行一遍无用操作 因此可得:优化点就是,尽量减少无用操作.只要知道本趟一次都没有交换位置的,就可以知道了

Python丨Python 性能分析大全

爱⌒轻易说出口 提交于 2020-02-29 17:14:22
虽然运行速度慢是 Python 与生俱来的特点,大多数时候我们用 Python 就意味着放弃对性能的追求。但是,就算是用纯 Python 完成同一个任务,老手写出来的代码可能会比菜鸟写的代码块几倍,甚至是几十倍(这里不考虑算法的因素,只考虑语言方面的因素)。很多时候,我们将自己的代码运行缓慢地原因归结于python本来就很慢,从而心安理得地放弃深入探究。 但是,事实真的是这样吗?面对python代码,你有分析下面这些问题吗: 程序运行的速度如何? 程序运行时间的瓶颈在哪里? 能否稍加改进以提高运行速度呢? 为了更好了解python程序,我们需要一套工具,能够记录代码运行时间,生成一个性能分析报告,方便彻底了解代码,从而进行针对性的优化(本篇侧重于代码性能分析,不关注如何优化)。 谁快谁慢 假设有一个字符串,想将里面的空格替换为字符‘-’,用python实现起来很简单,下面是四种方案: def slowest_replace(): replace_list = [] for i, char in enumerate(orignal_str): c = char if char != " " else "-" replace_list.append(c) return "".join(replace_list) def slow_replace(): replace_str = ""

Python全栈工程师(多继承、函数重写)

雨燕双飞 提交于 2020-02-29 11:11:38
ParisGabriel 每天坚持手写 一天一篇 决定坚持几年 为了梦想为了信仰   开局一张图                        Python人工智能从入门到精通 补充:   对象 -------------------------> 类 实例变量(属性)      类变量 实例方法          类方法( @classmethond) 静态方法( @staticmethond)(类内普通函数) 继承/派生   单继承:   一个子类只有一个父类   一个父类可以有多个子类 -------------------------------------------------------------------------------------------- 用于类的函数:    issublclass (cls, cls_or_tuple)    判断 这个类 是否继承自其他类 , 如果此cls是class   或 tuple中的一个派生子类 , 返回 True 否则返回 False 示例:   class A:     pass   class B(A):     pass   class C(B):     pass issublclass(C, B) # True issublclass(B, C) # False issublclass(C, (int,

python机器学习简介

廉价感情. 提交于 2020-02-29 09:35:02
目录 一:学习机器学习原因和能够解决的问题 二:为什么选择python作为机器学习的语言 三:机器学习常用库简介 四:机器学习流程   机器学习是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。 专门研究计算机怎样模拟或实现人类的学习行为 ,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。从数据中提取知识,也被称为 预测分析 或 统计学习 。   它是人工智能的核心,是使计算机具有智能的根本途径。   下面就让我们先了解一下机器学习吧。 一:学习机器学习原因和能够解决的问题 1.原因   机器学习现在已经越来越流行,并且在实际生活运用以及高级的科学问题上做出了贡献。   在早期的时候,许多系统和程序都是人为设定的决策规则,但是,人为制定的决策规则有缺点。一个是任务稍微有变化,可能需要重写系统;另一方面,还需要决策者对决策过程有很深刻的理解。   一个例子就是人脸识别,人类和计算机对人脸的描述有所不同,因此有时候需要用机器进行非常复杂的操作,并且需要机器能够自动学习和识别,这就需要让计算机机器进行机器学习。因此学习机器学习是很有必要的。 2.机器学习能够解决的问题   最成功的机器学习算法是能够将决策过程自动化的算法,从已知的示例中推导并泛化得出。这种算法叫做 监督学习 。   在这种算法中,用户将成对的输入和预期输出提供给算法

Python:使用threading模块实现多线程(转)

ぐ巨炮叔叔 提交于 2020-02-29 08:58:11
Python:使用threading模块实现多线程(转) 分类: python 标签: thread 评论: 暂无评论 阅读:5,420 views 综述 Python这门解释性语言也有专门的线程模型,Python虚拟机使用GIL(Global Interpreter Lock,全局解释器锁)来互斥线程对共享资源的访问,但暂时无法利用多处理器的优势。 在Python中我们主要是通过thread和 threading这两个模块来实现的,其中Python的threading模块是对thread做了一些包装的,可以更加方便的被使用,所以我们使用 threading模块实现多线程编程。这篇文章我们主要来看看Python对多线程编程的支持。 在语言层面,Python对多线程提供了很好的支持,可以方便地支持创建线程、互斥锁、信号量、同步等特性。下面就是官网上介绍threading模块的基本资料及功能: 实现模块 thread:多线程的底层支持模块,一般不建议使用; threading:对thread进行了封装,将一些线程的操作对象化 threading模块 Thread 线程类,这是我们用的最多的一个类,你可以指定线程函数执行或者继承自它都可以实现子线程功能; Timer与Thread类似,但要等待一段时间后才开始运行; Lock 锁原语,这个我们可以对全局变量互斥时使用; RLock

从蒙特卡洛方法计算pi值谈random模块

蓝咒 提交于 2020-02-29 06:20:39
计算机模拟常常需要用到随机选择的数。本文从随机数的一个简单应用开始简要地介绍Python的random模块。 使用蒙特卡洛方法计算pi值 Links:该问题来自于pudure university(普渡大学)python课程中的problem set2 Monte Carlo methods are used to simulate complex physical and mathematical systems by repeated random sampling. In simple terms, given a probability, p, that an event will occur in certain conditions, a program generates those conditions repeatedly. The number of times the event occurs divided by the number of times the conditions are generated should be approximately equal to p. 蒙特卡洛方法通过重复随机取样用于复杂的物理和数学系统的 仿真 。简单地说,给定一个变量p,用于描述事件在一定条件下发生的概率,程序重复地生成这些条件

Python之冒泡排序和选择排序的比较

大兔子大兔子 提交于 2020-02-29 02:14:49
个人有时候会把冒泡排序和选择排序搞混了,因为感觉它们之间的差别也没太大,如下是冒泡排序Python的代码: class BubbleSort: def __init__(self): self.initArr() def initArr(self): self.arrInfo = [60, 61, 27, 91, 92, 44, 13, 20, 24, 14] def bubbleSortFromStartToEnd(self): length = len(self.arrInfo) for i in range(length): for j in range(length-i-1): if self.arrInfo[j] > self.arrInfo[j+1]: tmp = self.arrInfo[j] self.arrInfo[j] = self.arrInfo[j+1] self.arrInfo[j+1] = tmp def bubbleSortFromEndToStart(self): length = len(self.arrInfo) for i in range(0,length): for j in range(length-1,i,-1): if self.arrInfo[j] < self.arrInfo[j-1]: tmp = self.arrInfo[j]