第二章:Python速成 2.2 进阶内容
2017-04-21 17:56
260 查看
# -*- coding: utf-8 -*- """ Created on Thu Apr 20 15:12:01 2017 @author: TANG @来源:《数据科学入门》 第二章 Python速成 2.2 进阶内容 """ #2.2.1 排序 x=[4,1,2,3] y=sorted(x) print y#[1, 2, 3, 4] print x#[4, 1, 2, 3] x.sort() print x#[1, 2, 3, 4] #对于函数来说 带了=号的都是关键字条件,就是函数按照非默认条件去执行 x=sorted([-4,1,-2,3],key=abs,reverse=True) print x #[-4, 3, -2, 1] word_counts={2:3,1:2} #items 用来遍历字典 wc=sorted(word_counts.items(),key=lambda(word,count):count,reverse=True) #2.2.2 列表解析 even_numbers=[x for x in range(5) if x%2==0] squares=[x*x for x in range(5)] #[0, 1, 4, 9, 16] even_squares=[x*x for x in even_numbers ] #[0, 4, 16] sqare_dict={x:x*x for x in range(5)} #{0:0,1:1,2:4,3:9,4:16} squre_set={x*x for x in [1,-1]} #set([1]) zeroes=[0 for _ in even_numbers] #使得与 even_numbers具有相同长度 paris=[(x,y) for x in range(10) for y in range (10)] increasing_pais=[(x,y) for x in range(10) for y in range(x+1,10)] #2.2.3 生成器和迭代器 #下面的程序是每执行一次while 消耗一个yield 比如当i<n 变成i<3时 只执行三次 def lazy_range(n): i=0 while i<n: yield i i+=1 for i in lazy_range(10): print ' do_some_thing' lazy_evens_below_20=(i for i in lazy_range(20) if i%2==0) #2.2.4 随机性 import random for_uniform_randoms=[random.random() for _ in range(4)]#生成在0-1之间均匀分布的随机数 random.seed(10) print random.random() #randrange 生成随机数,回取1到2各参数 并从对应的range中随机返回一个 random.randrange(10) random.randrange #用 shuffle随机排序 up_to_ten=range(10) random.shuffle(up_to_ten) print up_to_ten#[8, 7, 4, 2, 0, 3, 9, 6, 1, 5](结果可能不同) random.shuffle(up_to_ten) print up_to_ten #用choice 随机抽取 my_best_friend=random.choice(["Alice","BOb","Charlie"]) print my_best_friend #用sample不重复的选取元素 lottery_numbers=range(60) winning_numbers=random.sample(lottery_numbers,6) print winning_numbers #选择允许重复的 可以多次调用choice four_with_replacement=[random.choice(range(10)) for _ in range(4) ] print four_with_replacement #2.2.5 正则表达式 #2.2.6 面向对象的编程 class Set: #这些都是成员函数 #每个函数都取第一个参数“self”这是惯例 #它表示所用的特别的集合对象 def __init__(self,values=None): self.dict={}#set的每个例子都会有自己的dict属性 #我们会用这个属性赖追踪成员关系 if values is not None: for values in values: self.add(values) def __repr__(self): return "Set:"+ str(self.dic.keys()) #通过成为self.dict 中对应的值为True的键,来表示成员关系 def add(self,value): self.dict[value]=True #调用之后值变为True #如果它在字典中是一个键 那么在集合就是一个值 def contains(self,value): return value in self.dict#返回在字典中的值 def remove(self,value): del self.dict[value]#表示调用这个函数之后删除对应的值 s=Set([1,2,3]) s.add(4) print s.contains(4)#True s.remove(3) print s.contains(3)#False #2.2.7 函数式工具 def exp(base,power): return base ** power #方法一 #def tow_to_the(power): # return exp(2,power) #方法二 from functools import partial tow_to_the=partial(exp,2)#base=2 默认第一个 print tow_to_the(3)#8 tow_to_the=partial(exp,power=2) print tow_to_the(3)#9 def double(x): return 2*x xs=[1,2,3,4] #map就是函数与赋值同时进行 twice=map(double,xs)#==twice_xs=[double(x) for x in xs] #输出 [2, 4, 6, 8] list_doubler=partial(map,double) twice_xs=list_doubler(xs) def multiply(x,y): return x*y products=map(multiply,[1,2],[4,5])#[4,10] def is_even(x): '''True if x is even,False if x is odd''' return x%2==0 x_evens=[x for x in xs if is_even(x)]#[2,4] x_evens=filter(is_even,xs) list_evener=partial(filter,is_even) x_evens=list_evener(xs) x_product=reduce(multiply,xs) list_product=partial(reduce,multiply) x_product=list_product(xs) #2.2.8 枚举 #例如 想要输出一个列表的下标以及元素 ducuments=[1,5,8,9,7,8,4] #方法一 for i in range(len(ducuments)): ducument=ducuments[i] print (i,ducument) #方法二(枚举法) for i,document in enumerate(ducuments): print(i,ducument) #2.2.9 压缩和参数拆分 #把两个列表压缩 list1=['a','b','c'] list2=[1,2,3] list3=zip(list1,list2) print list3 #[('a', 1), ('b', 2), ('c', 3)] #解压 z1,z2=zip(*list3)#==zip(('a', 1), ('b', 2), ('c', 3)) print z1,z2#('a', 'b', 'c') (1, 2, 3) #2.2.10 args和kwargs #问题描述 如果要实现嵌套函数,举例方法 def double(f): def g(x): return 2*f(x) return g def f1(x): return x+1 g=double(f1)#先调用f1函数 再调用double print g(3) print g(-1) #但对于具有多个参数的函数就不可以使用 #解决方法 def magic(*args,**kwargs):#用来拆分元祖/列表 和字典 print "unnamed args",args print "keyword args",kwargs magic(1,2,key="word",key2="word2") #例子 def a_magic(x,y,z): return x+y+z x_y_list=[1,2] z_dict={'z':3} print a_magic(*x_y_list,**z_dict) #6
相关文章推荐
- Python进阶_2.通过URL获取HTMl内容
- 我与python约个会:30.2. 企业级开发进阶2.2:TCP实战
- Python自动化开发学习16-前端内容综合进阶
- PythonNLP学习进阶:第二章练习题(Python自然语言处理)
- Python读取PDF内容
- Python-面向对象进阶
- python计算文件的行数和读取某一行内容的实现方法
- python 自动化之路 day 20 Django进阶/BBS项目【一】
- python 函数进阶:参数传递,高阶函数,lambda 匿名函数,global 变量,递归
- Python数据处理进阶——pandas
- python进阶_浅谈面向对象进阶
- 在Windows环境下使用opencv2.2的python绑定
- 芝麻HTTP: Python爬虫进阶之爬虫框架概述
- opencv2.2 for python 安装
- python检索特定内容的文本文件
- python进阶知识点
- python爬虫进阶
- python下载文件(图片)源码,包含爬网内容(爬url),可保存cookie
- Python100例——第二章----生活中的数学
- Python Xpath 提取html整个元素(标签与内容)