您的位置:首页 > 编程语言 > Python开发

第二章: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 数据 utf-8