Python 快速学习教程
Python 快速学习教程
###Update 2015-1-14
之前学习C、C++比较多,最近正好网上有一些MOOC课程是关于python的。抽空学习了下,不得不说python给程序猿减轻太多负担了,很多内建的算法与数据结构,可以让我们快速做出demo原型。
现在归纳下这一个月学习python的语法关键点:
1.python 全程没有括号,代码段区分是以缩进来表示,有是哪个代码段就要有几个缩进,while if都是以空格代替
while count <5:
...
if ... :
...
elif ...:
...
else:
...
2.python中如果使用for循环,如果for中i一直到最后都没有跳入到if中,格式:
for i in range(10):
if i > 10
...
else:
...
for i in range(start, stop + 1):
...//i属于start到stop
range(10)是从0~9,则执行跟for对其的else语句块。range(1,10)是从1~9
3.radius = float(raw_input(‘Radius: ‘))使用raw_input可以接受用户的一行输入,然后套着float,可以转成float类型数据。 print 中可以可以使用c 中printf转义字符,\n \t
4.python中没有++,自增自减使用 value-=1 value+=1
5.查找prime素数,可以使用染色法。
6.def defaultParameters(arg1, arg2=2, arg3=3):三个参数可变
7.局部变量,全局变量
x = 1
def increase():
global x
x = x + 1
print x
increase()
print x
8.遇到日历问题,可以使用数组把每个月份写到数组里面去,然后判断闰年,然后循环判断该月是几月,查找数组,得到天数。
9.递归问题存在重复计算的问题。
def fib_loop(n):
if n == 1 or n == 2:
return 1
else:
i = 2
f1 = 1
f2 = 1
while(i < n):
f3 = f1 + f2
f1 = f2
f2 = f3
i = i + 1
return f3
10.字符串由单引号,双引号,三引号括起来,len()函数计算字符串长度,+拼接 *重复 字符串index()从前面开始数是0开始,倒数就是从-1开始,也就是说倒数第一个是-1,倒数第二个是-2,如果这个字符串11个字符,正着数是0~10,倒着数-1~-11
11.切片slice: [start:finish]这个切片最后得到的字符串index就是start~finish-1!如果finish不写,就是start到最后,start不写,就是从开始到finish-1 [start : finish : countBy] 这个可以传入步长,countBy可以是正数也可以是负数,[::-1]表示字符串逆序
>>> test_list=[1,2,3,4,5,6]
>>> list_2=test_list[1:4]
>>> list_3=test_list[-3:-1]
>>> list_4=test_list[0:-2]
>>> print list_2
[2, 3, 4]
>>> print list_3
[4, 5]
>>> print list_4
[1, 2, 3, 4]
12.字符串不可变!使用replace方法就是返回一个新的替换过的字符串,旧字符串不变! my_str.replace(old, new) 生成一个新的字符串,其中使用 new 替换 old 子串
13.find(‘ ‘) 返回字符串index,split(”)按照分隔符,返回一个list
14.文件使用:
f = open(filename, mode)//按行读取文件内容
for line in f:
name = line.strip()//吃掉回车
print name.title()//转换为首字母大写,剩下为小写
f.close()//关闭文件
f.write(str)//写文件
15.字符串格式化输出:str_value.format()
16.正则表达式:
import re
...
result=re.search(pattern,str)
17.list:
使用 [ ] 生成,元素之间用逗号分隔 可以包含多种类型的对象;字符串只能是字符 内容是可变的;字符串是不可变的 ###[::_ ] 这个有三部分组成,第一部分是begin 第二部分是end,第三部分是step步长,begin与end可以为负数,只要有意义!
list 操作:
list.insert(i, x) 第一个是index 第二个是value,插入到index的前面一个位置。 list.pop(i) i是index,如果未指定index,那么将list最后一个元素pop出来。 list.sort()真实排序 sorted(list)返回排序结果,原来list不变!
18.图形化学习python原理网站:http://www.pythontutor.com/
###19.swap中形参交换没有意义,要想交换,要将list参数传进来,然后指定index进行交换。
20.二分查找,递归写法:
def bi_search(nums,low,high,value):
if low <=high:
mid = (low+high)/2
if nums[mid]==value:
return mid
elif nums[mid] < value:
return bi_search(nums,mid+1,high,value)
elif nums[mid] > value:
return bi_search(nums,low,mid-1,value)
else:
return -1
21.生成值列表
lst= [x**2 for x in range(1,10)]#**为幂就是x的2次方,这种方式非常简便!
sum([ i for i in range(1, x + 1) if x % i == 0]) #另外我们可以再for后面加入if判断语句
22.lambda 函数 lambda函数就是匿名函数,我们不需要创建可以一个真实函数,我们可以直接使用lambda x:x[1] lambda后面就是参数,冒号后面就是返回值,这种方式适合函数体特别小的函数,简化代码!
students = [['zhang',96],['Li',97],['Wang',91]]
students.sort(key=lambda x : x[1],reverse=True)
print students
23.元组Tuple: 除了可改变列表内容的方法外,其它方法均适用于元组,len() index()都适用于Tuple,但是append(),extend()不适用! 如果我们依据字符串长度排序,而给定的只有字符串list,那么我们可以使用sort+lambda的方式!
words.sort(key=lambda x : len(x),reverse=True)
24.字典dic
在C++中就是map类型,有key/value。使用dic数据结构,可以快速的搜索,时间复杂度O(1)
len(my_dict)
if key in my_dict
for key in my_dict #key是无序的
my_dict.items() – 全部的键-值对
my_dict.keys() – 全部的键
my_dict.values() – 全部的值
my_dict.clear() – 清空字典
25 数据结构之间的相互转换
set -> list 类型 直接使用list(set)返回list类型变量
dic类型,使用dic.items()可以返回list类型的数据,然后可以进行遍历。 list类型使用特定的格式分割:
print ', '.join([__builtins__.str(i) for i in pset_list])
for word,rows in word_row_lst:
lst_row = list(rows)
lst_row.sort()
for i in range(len(lst_row)):
lst_row[i]=str(lst_row[i])
print word +':',', '.join(lst_row)
有时候我们会遇到str() is not callable的问题,很多时候我们是没有错的,这个时候就是有可能出现函数名字被覆盖的现象,我们因该使用__builtins__.str(i)
来调用str()函数,这个函数用来把其他类型的转化成为str类型,然后就可以进行字符串拼接。
join()函数网上讲的比较多,我就简单提一句,这个函数可以把list对象之间按照我们需要的分隔符分隔开来!
字符串编码:
###由于windows与unix类型的字符编码不同,这个导致字符出现乱码,在windows下面,我们如果想输入中文字符,我们使用gbk
###在linux/mac下面我们直接使用utf-8即可。网上说的很多手段不怎么适合!如果我们要使用utf8去输出,使用encode(‘utf-8′)方式输出
最后放一张表: