1. 三种排序方式
- 冒泡排序:两两比较,大的排右边,每次冒出去一个泡
m = [1,2,6,5,4] for i in range(len(m)): for j in range(i): if m[j] > m[j+1]: m[j],m[j+1] = m[j+1],m[j] print(m)
- 选择排序
对于一组关键字{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对换,最后剩下的就是该序列中的最大值,
一个由小到大的有序序列就这样形成。
m = [1,4,6,2,5] for i in range(len(m)): min = i for j in range(i,len(m)): if m[min]> m[j]: min = j m[i],m[min] = m[min],m[i] print(m)
- 插入排序
一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下:
1.从第一个元素开始,该元素可以认为已经被排序
2.取出下一个元素,在已经排序的元素序列中从后向前扫描
3.如果该元素(已排序)大于新元素,将该元素移到下一位置
4.重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
5.将新元素插入到该位置后
m = [1,4,6,2,5] for i in range(1,len(m)): save = m[i] j = i while j>0 and m[j-1]>save: m[j] = m[j-1] j-=1 m[j] = save print(m)
- 附:取一组随机数的方法
#http://blog.csdn.net/hinyunsin/article/details/6311707 import random def getrandata(num): a = [] i = 0 while i <num: a.append(random.randint(0,1000000)) i +=1 return a n = getrandata(5) print(n)
2. 递归
#1*2*3*4*5*6*7 def func(num): if num == 1: return 1 return num * func(num-1) x = func(7) print(x) print(1*2*3*4*5*6*7)
3. 反射
反射是基于字符串的形式去模块中操作其成员,主要就是attr系列。它的目的是简化代码,直接根据input的内容去模块里面找函数
import loginouthome #自己建的一个模块 def run(): inp = input("请输入要访问的url:") #利用字符串的形式去模块中操作成员 #loginouthome.inp() 这种是不行的哦 if hasattr(loginouthome,inp): #查看该模块是否有该成员 func = getattr(loginouthome,inp) #获取成员 func() else: print('404') run() #loginouthome.py是下面这个样子的 #def login(): # print("登录页面") # # def logout(): # print("登录2页面") # # # print("登录3页面") # def home():
4. 模块
1) 查看一些特殊的东西
import s2 #print(vars(s2)) #这个模块里有哪些变量 #print(s2.__dict__) # __name__ #如果我执行s2模块,那么s2的特殊变量__name__ = __main__ #一般主文件加上这么一个逻辑 # __file__ #当前运行的py文件所在的路径 # __doc__ #获取文件注释,就是函数那个三个引号引起来的部分 # __cached__ #pyc在哪个路径,解码存放的位置 # __package__ #表示模块在哪个目录下面
2) os模块
import os os.path.dirname() #找到某个文件的上级目录 os.path.abspath() #获取某个文件的绝对路径 sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
3) sys模块
#进度条 import sys import time def view_bar(num, total): rate = num / total rate_num = int(rate * 100) r = ' %d%%' % (rate_num, ) #如果把 去掉,就会变成同一行打 sys.stdout.write(r) sys.stdout.flush() #把输出清空 #print(r) if __name__ == '__main__': for i in range(0, 100): time.sleep(0.1) view_bar(i, 100)
4) hashlib模块,加密
import hashlib #加密模块 hash = hashlib.md5(bytes("23333")) #md5不能被解密,括号里加字节相当于自己的key,非常的保密 hash.update(bytes("admin",encoding="utf-8")) print(hash.hexdigest()) print(hash.digest())
5) 正则表达式模块 re
m = re.findall("alex","yualexnlagealexdsaew") #右边一堆里面找左边,普通字符匹配 print(m) n = re.findall("al.x","yualexnlagealexdsaew") #一个,如果加个类似换行符这种就匹配不到了 print(n) n = re.findall("^al.x","yualexnlagealexdsaew") # ^只有在起始位置才行 print(n) n = re.findall("al.*x","yualexnlagealexdsaew") #这个位置上可以匹配0到多个字符 print(n) n = re.findall("al.+x","yualexnlagealexdsaew") #这个位置上可以匹配1到多个字符 print(n) n = re.findall("al.?x","yualexnlagealexdsaew") #这个位置上可以匹配0到1字符 print(n) n = re.findall("al.{3}x","yualexnlagealexdsaew") #这个位置上可以匹配3个字符 print(n) n = re.findall("al.{1,5}x","yualexnlagealexdsaew") #这个位置上可以匹配1到5个字符 print(n) n = re.findall("al[a-z]x","yualexnlagealexdsaew") #这个位置上可以匹配a-z print(n) n = re.findall("al[^f]x","yualexnlagealexdsaew") #这个位置上可以匹配非f字符 print(n) n = re.findall("al[d]x","yualexnlagealexdsaew") #这个位置上可以匹配任意一个数字 print(n) n = re.match('com',"comwww.rruncomoodb").group() print(n) n = re.sub("g.t","have","I get A, I got B, I gut c") print(n) #正则分组:#去已经提取到的数据中再提取数据