随笔分类 - python
python笔记
摘要:1.如何循环获得下标,使用enumerateints = ['a','b','c','d','e','f']for idx, val in enumerate(ints): print idx, val结果:0 a1 b2 c3 d4 e5 f------------------------------------------------------------------------------------------2.python 中的switch 替代语法,使用字典xdef test(par
阅读全文
摘要:函数的partial应用 函数在执行时,要带上所有必要的参数进行调用。但是,有时参数可以在函数被调用之前提前获知。这种情况下,一个函数有一个或多个参数预先就能用上,以便函数能用更少的参数进行调用。例如:In [9]: from functools import partialIn [10]: def add(a,b): ....: return a+b ....: In [11]: add(4,3)Out[11]: 7In [12]: plus = partial(add,100)In [13]: plus(9)Out[13]: 109In [14]: plus2 = parti...
阅读全文
摘要:1.列表推导式书写形式: [表达式for变量in列表] 或者 [表达式for变量in列表if条件]2.举例说明:#!/usr/bin/python# -*- coding: utf-8 -*-li = [1,2,3,4,5,6,7,8,9]print [x**2 for x in li]print [x**2 for x in li if x>5]print dict([(x,x*10) for x in li])print [ (x, y) for x in range(10) if x % 2 if x > 3 for y in range(10) if y > 7 if
阅读全文
摘要:在上面的文章中,我写了python中的一些特性,主要是简单为主,主要是因为一些其他复杂的东西可以通过简单的知识演变而来,比如装饰器还可以带参数,可以使用装饰类,在类中不同的方法中调用,不想写的太复杂,接下来,我打算写一下python 与数据结构,以下是提纲:一、python数据结构之单链表的实现二、python数据结构之双链表的实现三、python数据结构之栈、队列的实现四、python数据结构之二叉树的实现五、python数据结构之二叉树遍历的实现六、python数据结构之图的实现七、python数据结构之图深度优先和广度优先八、python排序算法的实现-冒泡九、python排序算法的实现
阅读全文
摘要:1.算法:(设查找的数组期间为array[low, high])(1)确定该期间的中间位置K(2)将查找的值T与array[k]比较。若相等,查找成功返回此位置;否则确定新的查找区域,继续二分查找。区域确定如下:a.array[k]>T 由数组的有序性可知array[k,k+1,……,high]>T;故新的区间为array[low,……,K-1]b.array[k] t: height = mid - 1 else: return array[mid] return -1if __name__ == "__main__": ...
阅读全文
摘要:1、 算法描述:1.先从数列中取出一个数作为基准数。2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。3.再对左右区间重复第二步,直到各区间只有一个数。2、python代码#!/usr/bin/python# -*- coding: utf-8 -*-def sub_sort(array,low,high): key = array[low] while low = key: high -= 1 while low < high and array[high] < key: array[low] ...
阅读全文
摘要:1.算法: 设有一组关键字{ K 1 , K 2 ,…, K n };排序开始就认为 K 1 是一个有序序列;让 K 2 插入上述表长为 1 的有序序列,使之成为一个表长为 2 的有序序列;然后让 K 3 插入上述表长为 2 的有序序列,使之成为一个表长为 3 的有序序列;依次类推,最后让 K n 插入上述表长为 n-1 的有序序列,得一个表长为 n 的有序序列。2.python代码def insertion_sort(list2): for i in range(1, len(list2)): save = list2[i] j = i wh...
阅读全文
摘要:1.算法:对于一组关键字{K1,K2,…,Kn}, 首先从K1,K2,…,Kn中选择最小值,假如它是 Kz,则将Kz与 K1对换;然后从K2,K3,… ,Kn中选择最小值 Kz,再将Kz与K2对换。如此进行选择和调换n-2趟,第(n-1)趟,从Kn-1、Kn中选择最小值 Kz将Kz与Kn-1对换,最后剩下的就是该序列中的最大值,一个由小到大的有序序列就这样形成。2.python 代码:def selection_sort(list2): for i in range(0, len (list2)): min = i for j in range(i + 1, ...
阅读全文
摘要:1.算法描述:(1)共循环 n-1 次(2)每次循环中,如果 前面的数大于后面的数,就交换(3)设置一个标签,如果上次没有交换,就说明这个是已经好了的。2.代码#!/usr/bin/python# -*- coding: utf-8 -*-def bubble(l): flag = True for i in range(len(l)-1, 0, -1): if flag: flag = False for j in range(i): if l[j] > l[j + 1]: ...
阅读全文
摘要:首先有一个概念:回溯 回溯法(探索与回溯法)是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。深度优先算法:(1)访问初始顶点v并标记顶点v已访问。(2)查找顶点v的第一个邻接顶点w。(3)若顶点v的邻接顶点w存在,则继续执行;否则回溯到v,再找v的另外一个未访问过的邻接点。(4)若顶点w尚未被访问,则访问顶点w并标记顶点w为已访问。(5)继续查找顶点w的下一个邻接顶点wi,如果v取值wi转到步骤(3)。直到连通图中所有顶点全部访问过为止。广.
阅读全文
摘要:python数据结构之图的实现,官方有一篇文章介绍,http://www.python.org/doc/essays/graphs.html下面简要的介绍下:比如有这么一张图: A -> B A -> C B -> C B -> D C -> D D -> C E -> F F -> C可以用字典和列表来构建 graph = {'A': ['B', 'C'], 'B': ['C', 'D'], 'C': ['D'], &
阅读全文
摘要:本篇是实现二叉树的三种遍历,先序遍历,中序遍历,后序遍历#!/usr/bin/python# -*- coding: utf-8 -*-class TreeNode(object): def __init__(self,data=0,left=0,right=0): self.data = data self.left = left self.right = rightclass BTree(object): def __init__(self,root=0): self.root = root def is_empty...
阅读全文
摘要:树的定义 树是一种重要的非线性数据结构,直观地看,它是数据元素(在树中称为结点)按分支关系组织起来的结构,很象自然界中的树那样。树结构在客观世界中广泛存在,如人类社会的族谱和各种社会组织机构都可用树形象表示。树在计算机领域中也得到广泛应用,如在编译源程序时,可用树表示源程序的语法结构。又如在数据库系统中,树型结构也是信息的重要组织形式之一。一切具有层次关系的问题都可用树来描述。 树结构的特点是:它的每一个结点都可以有不止一个直接后继,除根结点外的所有结点都有且只有一个直接前驱。 树的递归定义如下:(1)至少有一个结点(称为根)(2)其它是互不相交的子树二叉树: 二叉树是由n(n≥0)...
阅读全文
摘要:这个在官网中list支持,有实现。补充一下栈,队列的特性:1.栈(stacks)是一种只能通过访问其一端来实现数据存储与检索的线性数据结构,具有后进先出(last in first out,LIFO)的特征2.队列(queue)是一种具有先进先出特征的线性数据结构,元素的增加只能在一端进行,元素的删除只能在另一端进行。能够增加元素的队列一端称为队尾,可以删除元素的队列一端则称为队首。地址在http://docs.python.org/2/tutorial/datastructures.html#more-on-lists ,下面的官方的代码。关于栈>>> stack = [3
阅读全文
摘要:和单链表类似,只不过是增加了一个指向前面一个元素的指针而已。示意图:python 实现代码:#!/usr/bin/python# -*- coding: utf-8 -*-class Node(object): def __init__(self,val,p=0): self.data = val self.next = p self.prev = pclass LinkList(object): def __init__(self): self.head = 0 def __getitem__(self, key): ...
阅读全文
摘要:链表的定义: 链表(linked list)是由一组被称为结点的数据元素组成的数据结构,每个结点都包含结点本身的信息和指向下一个结点的地址。由于每个结点都包含了可以链接起来的地址信息,所以用一个变量就能够访问整个结点序列。也就是说,结点包含两部分信息:一部分用于存储数据元素的值,称为信息域;另一部分用于存储下一个数据元素地址的指针,称为指针域。链表中的第一个结点的地址存储在一个单独的结点中,称为头结点或首结点。链表中的最后一个结点没有后继元素,其指针域为空。 如下图所示:单链表的结构:单链表的插入和删除示意图:python实现代码:#!/usr/bin/python# -*- coding..
阅读全文
摘要:什么是生成器? 生成器是一个包含了特殊关键字yield的函数。当被调用的时候,生成器函数返回一个生成器。可以使用send,throw,close方法让生成器和外界交互。生成器也是迭代器,但是它不仅仅是迭代器,拥有next方法并且行为和迭代器完全相同。所以生成器也可以用于python的循环中,如何使用?首先看一个例子: 1 #!/usr/bin/python 2 # -*- coding: utf-8 -*- 3 4 def flatten(nested): 5 for sublist in nested: 6 for element in sublist: 7 ...
阅读全文
摘要:什么是迭代器? 迭代器是带有next方法的简单对象,当然也要实现__iter__函数。迭代器能在一序列的值上进行迭代,当没有可供迭代时,next方法就会引发StopIteration 的异常。python中有很多的对象都是迭代器,例如:列表,元素,字符串,文件,映射,集合如何使用迭代器?1. for 变量 in 可迭代对象例如:list1 = [1,2,3,4,5]for ele in list1: print ele,结果为:1 2 3 4 52. if 变量 in 可迭代对象例如:list1 = [1,2,3,4,5]var = 1if var in list1: print...
阅读全文
摘要:#!/usr/bin/env python## Copyright 2009 Facebook## Licensed under the Apache License, Version 2.0 (the "License"); you may# not use this file except in compliance with the License. You may obtain# a copy of the License at## http://www.apache.org/licenses/LICENSE-2.0## Unless required by app
阅读全文
摘要:什么是python的装饰器? 网络上的定义: 装饰器就是一函数,用来包装函数的函数,用来修饰原函数,将其重新赋值给原来的标识符,并永久的丧失原函数的引用。 在google上搜索下python 装饰器 可以搜索到很多关于很多的关于装饰器的文章,一个很简单,最能说明装饰器的例子如下:#-*- coding: UTF-8 -*-import time def foo(): print 'in foo()' # 定义一个计时器,传入一个,并返回另一个附加了计时功能的方法def timeit(func): # 定义一个内嵌的包装函数,给传入的函数加上计时功能的包装 ...
阅读全文