python算法

Python基础:序列(列表、元组)

北慕城南 提交于 2020-01-27 13:10:30
一、概述 列表 (list)是由一个个 Python对象 组成的序列。其中, Python对象 可以是任何类型的对象,包括 Python标准类型 (数值、字符串、列表、元组和字典)以及 用户自定义类型 (类)。相比而言, 字符串 仅仅是字符的序列,因此列表的概念和用途比字符串更广泛。 元组 (tuple)也是 Python对象 的序列,与列表非常接近。二者的主要差异点如下: 差异点 列表 元组 表示方法 空列表:[] 单元素列表:[1] 多元素列表[1, 'a'] 空元组:() 单元素元组:(1,) 多元素元组:(1, 'a') 可变性 可变 不可变 可操作性 支持丰富的操作 仅支持序列操作 可哈希性 不可哈希,不能作为字典的关键字 可哈希,可以作为字典的关键字 其中, 可变性 是列表和元组之间最本质的差异:列表是一个可变序列,而元组是一个不可变序列。用C/C++的话来讲, 元组是一个const版本的列表 。 二、操作 由于列表和元组都是序列类型,因此它们都支持 Python基础:序列 中给出的 通用序列操作 。 特别地,作为一个可变序列,列表还支持以下 列表操作 : 操作 说明 s[i] = x 用x替换s中的第i个成员 del s[i] 从s中删除第i个成员 s[i:j] = t 用t替换s[i:j] del s[i:j] 从s中删除s[i:j](等价于s[i:j] = [])

k近邻(k-NN)算法的python实现

不羁的心 提交于 2020-01-26 19:01:58
k-NN算法是实现分类的一种简单有效的算法,并且可以实现多类别分类。k-NN算法的三个要素为:距离度量、k值的选择以及分类决策规则。 本文采用欧式距离作为距离度量,近邻数量选取为7,采用多数票方式决定样本的类型。 from sklearn import datasets import matplotlib . pyplot as plt # 画图工具 import numpy as np import heapq from collections import Counter X , y = datasets . make_classification ( n_samples = 1000 , n_features = 10 , n_classes = 3 , n_informative = 3 , random_state = 1 ) #生成1000个样本,共有10个属性,分为3个类别 np . random . seed ( 0 ) x_new = np . random . randint ( 5 , 20 , [ 10 , 1 ] ) #生成一个随机的样本,作为新来样本 def distance ( ) : distances = [ ] for i in range ( X . shape [ 0 ] ) : t = 0 for j in range ( x_new .

Python模块知多少?这里有五百不知够不够你用?

此生再无相见时 提交于 2020-01-26 19:01:21
常用模块 Chardet -- -- -- -- -- -- - 字符编码探测器,可以自动检测文本、网页、xml的编码。 colorama -- -- -- -- -- -- 主要用来给文本添加各种颜色,并且非常简单易用。 Prettytable -- -- -- -- - 主要用于在终端或浏览器端构建格式化的输出。 difflib -- -- -- -- -- -- - [ Python ] 标准库,计算文本差异 Levenshtein -- -- -- -- - 快速计算字符串相似度。 fuzzywuzzy -- -- -- -- -- 字符串模糊匹配。 esmre -- -- -- -- -- -- -- - 正则表达式的加速器。 shortuuid -- -- -- -- -- - 一组简洁 URL / UUID 函数库。 ftfy -- -- -- -- -- -- -- -- Unicode文本工具 7 unidecode -- -- -- -- -- - ascii和Unicode文本转换函数。 xpinyin -- -- -- -- -- -- - 将汉字转换为拼音的函数库 pangu . py -- -- -- -- -- -- 调整对中日韩文字当中的字母、数字间距。 pyfiglet -- -- -- -- -- -- Python写的figlet程序

面向对象

自闭症网瘾萝莉.ら 提交于 2020-01-26 18:18:38
第六章 面向对象 规范化目录 规范化目录的优点 #1:加载速度块#2:可读性高#3:查询修改代码时都简单​ 规范化目录分析 划归固定的路径 将文件目录的固定路径划分完成​ settings.py配置文件 #1:基本存储的都是变量#2:静态路径,数据库的链接,配置,静态文件的的路径,基本不发生改变的​ src.py主逻辑函数 #主逻辑函数,核心函数:贯穿整个项目的主要功能​ common.py公共组件 #放置一些公用的函数,功能,方便与其他的函数或者业务需求,如:装饰器​ start启动文件 #单独的启动文件,将所有项目的功能单独放置一个文件中,开启项目方便,醒目​ register #用户信息,数据相关,多个文件​ logging日志文件 #记录用户的访问次数,转账,取钱,充钱等等.极了用户干了什么.​ README描述文件 #1:软件定位,软件的基本功能。#2:运行代码的方法: 安装环境、启动命令等。#3:简要的使用说明。#4:代码目录结构说明,更详细点可以说明软件的基本原理。#5:常见问题说明。​ 规范化目录sys模块路径加载 #版本一sys模块内置模块,文件运行时,sys内置模块就会将一些模块 自动 加载到内存. 内置模块. time,json pickle等等.以及当前目录的.如何引用到一个模块最本质的原因在于这个模块名称空间在不在内存.如果直接引用不到一个模块

认识python

好久不见. 提交于 2020-01-26 10:03:10
python介绍 python的创始⼈为吉多·范罗苏姆(Guido van Rossum)。1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决⼼开发⼀个新的脚本解释程序,作为ABC语⾔的⼀种继承。最新的TIOBE排⾏榜,Python已经占据世界第四名的位置, Python崇尚优美、清晰、简单,是⼀个优秀并⼴泛使⽤的语⾔。 Python整体呈上升趋势,反映出Python应⽤越来越⼴泛并且也逐渐得到业内的认可!!! Python可以应⽤于众多领域,如:数据分析、组件集成、⽹络服务、图像处理、数值计算和科学计算等众多领域。⽬前业内⼏乎所有 ⼤中型互联⽹企业都在使⽤Python,如:Youtube、Dropbox、BT、Quora(中国知乎)、⾖瓣、知乎、Google、Yahoo!、 Facebook、NASA、百度、腾讯、汽⻋之家、美团等。 ⽬前Python主要应⽤领域: 云计算: 云计算最⽕的语⾔, 典型应⽤OpenStack WEB开发: 众多优秀的WEB框架,众多⼤型⽹站均为Python开发,Youtube, Dropbox, ⾖瓣。。。, 典型WEB框架有Django 科学运算、⼈⼯智能: 典型库NumPy, SciPy, Matplotlib, Enthought librarys,pandas 系统运维: 运维⼈员必备语⾔ ⾦融:量化交易,⾦融分析,在⾦融

Scikit Learn: 在python中机器学习

霸气de小男生 提交于 2020-01-26 09:24:10
参考: sklearn 数据集认识: sklearn中的iris数据集有5个key: [‘target_names’, ‘data’, ‘target’, ‘DESCR’, ‘feature_names’] target_names : 分类名称 [‘setosa’ ‘versicolor’ ‘virginica’] target:分类(150个) (150L,) [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2] feature_names: 特征名称 (‘feature_names:’, [‘sepal length (cm)’, ‘sepal width (cm)’, ‘petal length (cm)’, ‘petal width

python GC

时光怂恿深爱的人放手 提交于 2020-01-26 01:14:50
引用计数 python的GC主要依靠引用计数来进行垃圾回收。python给所有对象维护一个引用计数的属性,在一个引用被创建或复制的时候,相关对象的引用计数+1,引用被销毁的时候相关对象的引用计数-1。对象引用计数为0的时候,系统会立即回收该内存 // object.h struct _object { Py_ssize_t ob_refcnt ; // 引用计数值 struct PyTypeObject * ob_type ; } 每个python对象的头部均包含了其引用计数值。 如果只有引用计数,那么当对象出现循环引用的时候,会出现内存泄漏。 import sys class test ( ) : def __init__ ( self ) : pass a1 = test ( ) a2 = test ( ) a1 . _self = a1 print sys . getrefcount ( a1 ) print sys . getrefcount ( a2 ) 这段代码的结果为3 和 2 (给getrefcount方法传参的时候会增加1,对只有一个引用的对象调用该方法时理论上的结果都是2) 标记-清除 『标记清除(Mark—Sweep)』算法是一种基于追踪回收(tracing GC)技术实现的垃圾回收算法。它分为两个阶段:第一阶段是标记阶段,GC会把所有的『活动对象』打上标记

python数据结构和算法

我怕爱的太早我们不能终老 提交于 2020-01-25 21:53:04
常用算法: 穷举法 - 又称为暴力破解法,对所有的可能性进行验证,直到找到正确答案。 贪婪法 - 在对问题求解时,总是做出在当前看来 最好的选择,不追求最优解,快速找到满意解。 分治法 - 把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题,直到可以直接求解的程度,最后将子问题的解进行合并得到原问题的解。 回溯法 - 回溯法又称为试探法,按选优条件向前搜索,当搜索到某一步发现原先选择并不优或达不到目标时,就退回一步重新选择。 动态规划 - 基本思想也是将待求解问题分解成若干个子问题,先求解并保存这些子问题的解,避免产生大量的重复运算。 排序算法 def select_sort ( origin_items , comp = lambda x , y : x < y ) : """简单选择排序""" items = origin_items [ : ] for i in range ( len ( items ) - 1 ) : min_index = i for j in range ( i + 1 , len ( items ) ) : if comp ( items [ j ] , items [ min_index ] ) : min_index = j items [ i ] , items [ min_index ] = items [ min

用Python实现数据结构之树

时光怂恿深爱的人放手 提交于 2020-01-25 06:11:58
树 树是由根结点和若干颗子树构成的。树是由一个集合以及在该集合上定义的一种关系构成的。集合中的元素称为树的结点,所定义的关系称为父子关系。父子关系在树的结点之间建立了一个层次结构。在这种层次结构中有一个结点具有特殊的地位,这个结点称为该树的根结点,或称为树根。 相关概念 根节点:树中最顶部的元素 父节点:处了根节点都有父节点,每个节点最多只有一个父节点 孩子节点:一个父节点具有0个或多个孩子节点 兄弟节点:同一个父节点的孩子节点之间是兄弟关系 外部节点:一个没有孩子的节点称为外部节点,也叫叶子结点 内部节点:有一个或多个孩子节点的节点叫做内部节点 树的边:指一对节点(u,v),其中u是v的父节点或者v是u的父节点 树的路径:一系列连续的边组成了一条路径 节点的深度:节点的深度就是该节点的祖先的个数,不包括该节点本身,如果根节点的层数为1,则深度即为该节点的层数-1 节点的高度:如果p是树中的叶子节点,那么它的高度为0.否则p的高度是它的孩子节点中的最大高度+1 有序树:每个孩子之间有一定的顺序,例如: 一个树的抽象基类 class Tree(): """ 树的抽象基类 """ # 叫做位置的内嵌类,用于封装节点 class Position(): def element(self): raise NotImplementedError('must be implemented by

如何比较版本号--Python实现

折月煮酒 提交于 2020-01-25 03:46:13
需求 在写一个程序Django项目的setup程序(初始化环境,比如设置PIP源,安装该项目依赖的各种模块等操作)遇到一个系统当前模块版本和项目所需版本的比较然后给出建议是忽略还是升级。我的要求是不仅仅比较版本号是否一致以及返回最大版本号,而且还要给出建议是升级(当前系统包的版本号小于项目需要的版本号)还是忽略(当前系统包的版本号大于等于项目需要的版本号)。下图就是我们要去比较的东西。 解题分析 版本号虽然是数字组成但是一个整体的版本号无法通过数字进行比较需要拆解逐位比较 版本号有长度的区别我们可以称作位,比如1.1.1这就是3位,我们这里的位说的是“.”分割的位数。 1.111.1也是三位。位数就是“.”的个数加1. 算法一:补位算法 比如1.11.2和1.9比较,既然是逐位比较那就需要循环,两个版本号位数不同如果按照最长的位数循环那短的哪一个肯定抛异常,那么我就可以通过补位来实现,怎么补呢?1.9 和 1.9.0 看到了么,这两个版本号是相同的,为什么呢?有谁见过1位的版本号呢?都使用1.0而不会单纯使用1,长度相同那剩下的就是循环比较。 #!/usr/bin/env python # -*- coding: utf-8 -*- import sys def checkVersion(currentversion, expectedversion): """ 检查版本号是否相同