第二章:Python速成 2.2 进阶内容

来源:互联网 发布:易语言iphone在线源码 编辑:程序博客网 时间:2024/05/24 04:09
# -*- 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+=1for 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 randomfor_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#选择允许重复的 可以多次调用choicefour_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)#Trues.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 partialtow_to_the=partial(exp,2)#base=2 默认第一个print tow_to_the(3)#8tow_to_the=partial(exp,power=2)print tow_to_the(3)#9def double(x):    return 2*xxs=[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*yproducts=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==0x_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 gdef f1(x):    return x+1g=double(f1)#先调用f1函数 再调用doubleprint g(3)print g(-1)#但对于具有多个参数的函数就不可以使用#解决方法def magic(*args,**kwargs):#用来拆分元祖/列表 和字典    print "unnamed args",args    print "keyword args",kwargsmagic(1,2,key="word",key2="word2")#例子def a_magic(x,y,z):    return x+y+zx_y_list=[1,2]z_dict={'z':3}print a_magic(*x_y_list,**z_dict)  #6
0 0
原创粉丝点击