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

# -*- 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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值