Python 快速学习教程

January 7th, 2015 by JasonLe's Tech Leave a reply »

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不变!

20150107103532

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’)方式输出

最后放一张表:

截图 - 2015年01月13日 - 15时57分04秒