Python语言学习笔记(一)
Python中的变量是一个符号,改变的是符号的引用,要与C/Java语言的区别开
例如
再看如下特性
Python的数据类型
数字、字符串、列表、元祖、字典
注意切片功能,怎么反向切?
一图看懂Python
python自定义函数和调用
1 class TreeNode: 2 def __init__(self,value): 3 self.children = [] 4 self.value = value 5 6 def add_child(self,*child): 7 self.children+=child 8 9 def show(self,layer): 10 print " "*layer+self.value 11 map(lambda child:child.show(layer+1),self.children) 12 13 14 def main(): 15 a1 = TreeNode("A-1") 16 b1 = TreeNode("B-1") 17 b2 = TreeNode("B-2") 18 c1 = TreeNode("C-1") 19 d1 = TreeNode("D-1") 20 a1.add_child(b1,b2) 21 b1.add_child(c1,TreeNode("C-2")) 22 b2.add_child(TreeNode("C-3"),TreeNode("C-4")) 23 c1.add_child(d1) 24 d1.add_child(TreeNode("E-1"),TreeNode("E-2")) 25 a1.show(0) 26 if __name__=="__main__":main() 27 28 29 #快速自定义函数 30 31 def quicksort(array): 32 less = []; greater = [] 33 if len(array) <= 1: 34 return array 35 pivot = array.pop() 36 for x in array: 37 if x<= pivot: less.append(x) 38 else: greater.append(x) 39 return quicksort(less) + [pivot] + quicksort(greater) 40 41 x = [2, 3, 1, 2, 10, 293, 2] 42 quicksort(x) 43 print x 44 print quicksort(x)
python中的序列(切片和索引)
列表、元祖、字符串
操作:cmp, +, max, min, len, *, in
#元祖的值不可修改
#元祖可以存放多种类型
列表:定义与方法
列表的内容可以重新赋值,赋值后的地址不变
列表的方法
字典:类似于Java中的hashMap,有keys和values
dict {}, 列表[], 元祖()
条件语句和循环, break, continue
##
##python得到系统时间
import time print time.strftime("%Y-%m-%d %H:%M:%S")
strftime(format[, tuple]) -> string
将指定的struct_time(默认为当前时间),根据指定的格式化字符串输出
python中时间日期格式化符号:
%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(000-9999)
%m 月份(01-12)
%d 月内中的一天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(01-12)
%M 分钟数(00=59)
%S 秒(00-59)
%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的日期表示和时间表示
%j 年内的一天(001-366)
%p 本地A.M.或P.M.的等价符
%U 一年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%W 一年中的星期数(00-53)星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称
%% %号本身
可参考R的时间系统格式
Python字典按照值或键排序
嵌套列表推导表达式:
加强版的Python交互shell:IPython,%reset 清除interactive命名空间;%xdel 从Ipython系统中移除特定对象的一切引用
""" 没错。这个地方的定义,是这样的: 一个.py文件,如果是自身在运行,那么他的__name__值就是"__main__"; 如果它是被别的程序导入的(作为一个模块),比如: import re 那么,他的__name__就不是"__main__"了。 所以,在.py文件中使用这个条件语句,可以使这个条件语句 块中的命令只在它独立运行时才执行 """ def main(): x = 3 y = 4 return x + y if __name__ == '__main__': print "main() = %s" % main()
matplotlib之绘图
points = np.arange(-5, 5, 0.01) xs , ys = np.meshgrid(points, points) import matplotlib.pyplot as plt z = np.sqrt(xs**2 + ys ** 2) plt.imshow(z, cmap = plt.cm.gray) plt.colorbar() plt.title("Image plot of $\sqrt{x^2 + y^2}$ for a grid of values")
思考下标题的 "Image plot of $\sqrt{x^2 + y^2}$ for a grid of values"?
简单的数据分析过程:
import time from pandas import Series, DataFrame import pandas as pd import numpy as np start = time.time() name = ['movie_id', 'title', 'genres'] movies = pd.read_table('D:\Python_WorkSpace\ml-1m\movies.dat', sep = "::", header = None, names = name) genre_iter = (set(x.split('|')) for x in movies.genres) geners = sorted(set.union(*genre_iter)) dummies = DataFrame(np.zeros((len(movies), len(movies.genres))), columns = movies.genres) for i, gen in enumerate(movies.genres): dummies.ix[i, gen.split('1')] = 1 movies_Widdic = movies.join(dummies.add_prefix('Genre_')) movies_Widdic.ix[0] end = time.time() print 'time = %.4f '%(end - start)
数据聚合与分组运算
关系型数据库和SQL能够如此流行的原因之一就是能够方便的对数据进行连接、过滤、转换和聚合。
Hadely Wickham创造了一个用于分组运算的术语"split-apply-combine"(拆分-应用-合并)。
Python图形化工具的生态系统
- Chacos
- mayavi
图形工具的未来,基于WEB(比如JavaScript)的图形化是必然的发展趋势。
非WEB式的图形化开发工作在近几年中减慢了许多。
Python和其他数据分析和统计计算环境(如R)都是如此。
Python类与继承
#继承list的方法,超类的初始化方法,另外增加了一个计数特性
class CounterList(list): def __init__(self, *args): super(CounterList, self).__init__(*args) self.counter = 0 def __getitem__(self, index): self.counter += 1 return super(CounterList, self).__getitem__(index)
#静态方法和类方法在Python中向来都不是很重要
class MyClass: @staticmethod #静态方法 def smeth(): print 'this is a static method' @classmethod #类方法 def cmeth(cls): print 'this is a class method', cls
-
easy_install和pip的区别
#自动访某个网址 from selenium import webdriver import time M = 100000 i = 0 URL = 'http://www.yyxxww.com/html/2015/edu_0318/3386.html' browser = webdriver.Firefox() #浏览器名字,以本机安装为准 while i < M: browser.get(URL) time.sleep(1) i += 1 browser.quit() print '本次python总共打开了', i, '次' #提取一级标题 import urllib2 from sgmllib import SGMLParser URL = 'http://www.yyxxww.com/html/2015/edu_0318/3386.html' class ListName(SGMLParser): def __init__(self): SGMLParser.__init__(self) self.is_h4 = "" self.name = [] def start_h4(self, attrs): self.is_h4 = 1 def end_h4(self): self.is_h4 = "" def handle_data(self, text): if self.is_h4 == 1: self.name.append(text) content = urllib2.urlopen(URL).read() listname = ListName() listname.feed(content) for item in listname.name: print item.decode('gbk').encode('utf8') #访问百度,并填写表单,中文暂时不好解决,英文没问题 # coding = utf-8 import sys reload(sys) sys.setdefaultencoding('utf8') from selenium import webdriver browser = webdriver.Firefox() browser.get("http://www.baidu.com") browser.find_element_by_id("kw").send_keys("你好").decode('gbk').encode('gb2312') browser.find_element_by_id("su").click() time.sleep(30) # 休眠3秒 browser.quit()
python 计算分位数
import numpy as np a=np.array(([1,2,3,4])) np.median(a)#中位数 np.percentile(a,95)#95%分位数