为什么要学Python呢,为了打好机器学习这场仗,需要有件趁手的兵器~这就是Python。
作为可执行的伪代码,实现起来的便利性就不多说了,关键是它的开源代码多、环境好、有机器学习的库:scikit-learn,当然,还有强大的字符串处理功能。
从《利用Python进行数据分析》附录开始(基础语法)从与常用的语言的区别开始谈起。本文注重Python常用并与C语言有区别的语法。
1.
a = [1,2,3]
b = a
a.append(4)
此时a与b都等于[1,2.3,4]。即“=”表示a和b都指向同一个对象:[1,2,3]
2.
函数可对其参数进行改变操作。
C中函数调用的时候只是对形参的值进行复制使用,而Python的函数是纯粹把形参拿过来了
def append_element(some_list,element)
some_list.append(element)
data = [1,2,3]
append_element(data,4)
此时data就确确实实等于[1,2,3,4]了。
3.
isinstance:了解对象的类型
isinstance(5,int) #ture
isinstance(4.5,(int,float)) #true
isinstance(4.5,int) #flase
4.
isiterable:判断某对象是否可迭代
isiterable([1,2,3]) #true
isiterable(5) #flase
5.
import
这个东西可将其他.py文件中的函数和定义好的变量引用在当前.py中,用这个就可以把各种库引入进来了
from numpy import* # 把numpy库中所有东西都引用过来
6.
is:用于判断两个引用是否指向同一个对象
a = [1,2,3]
b = a
c = list(a) #list可新建列表
a is b #true
a is not c #flase
a == c #true
7.
虚数虚部用 j 表示
cval = 1+2j
8.
字符串表示方法:
a = 'meachine learning'
b = 'big data'
c = """i love
meachine learning #用于带换行
"""
Python字符串是不可以改变的,想修改字符串只能新建。
9.
字符串转换与处理
许多Python对象都可以通过str函数转换为字符串:
a = 5.6
s = str(a) #s = '5.6'
字符串可以被当做某种序列类型(如列表、元组)来处理:
list(s) #['5' , '.' , '6']
s[:2] #'5.'
10.
pass
什么都不执行,在开发新程序中用来占位以保证程序完整性。
11.
三元表达式
value = true-expr if condition else false-expr
它和下面这种格式效果一致:
if condition
value = true-expr
else:
value = false-expr
12.
元组构成的元组:
nested_tup = (4,5,6),(1,2) #nested_tup : ((4,5,6),(1,2))
tuple可将任何序列或迭代器转换为元组
tuple([4,2,0]) #(4,2,0)
tup = tuple('string') #tup : ('s','t','r','i','n','g')
tup[0] # 's'
元组元素不可修改,但可以添加:
tup = tuple(['foo',[1,2],True])
tup[2] = False #TypeError
tup[1].append(3) #tup : ('foo',[1,2,3],True)
元组拆包:
tup = 4,5,(6,7)
a,b,(c,d) = tup # d : 7
元组方法:count
a = (1,2,3,2)
a.count(2) # 2
13.
列表
可通过方括号[]或者list函数定义:
a_list = [2,3,7,None]
tup = ('1','2','3')
b_list = list(tup) # b_list : ['1','2','3']
b_list[1] = '4' #b_list : ['1','4','3']
14.
b_list.append('dearf') # b_list : ['1','4','3','dearf']
b_list.insert(1,'dearf') # b_list : ['1','dearf','4','3','dearf']
b_list.remove('dearf') # b_list : ['1','4','3','dearf']
'3' in b_list # True
b_list.extend(7,8,(2,3)) # b_liist : ['1','4','3','dearf',7,8,(2,3)]
在相同效果下extend比“+”的操作要快得多
15.
sort
a = [7,2,1,4]
a.sort() # a : [1,2,4,7]
b = a.sorted() # b : [1,2,4,7] a不变
sorted('hourse race') #[' ','a','c','e','h','o','r','r','s']
c = ['mmm','m','mm']
c.sort(key = len) # c : ['m','mm','mmm']
a.sort(reverse = True) # a : [7,4,2,1]
16.
dict
在机器学习这种需要处理文本的情况下,字典的重要性相当大。字典本质上是一个二元元组集。
empty_dict = {}
dict = {'a':'some value' , 'b':[1,2,3,4]}
dict[7] = 'an integer' #dict : {7:'an integer' , 'a':'some value' , 'b':[1,2,3,4]}
'b' in dict #True
del dict[7] #删除dict中7:'an integer'
ret = dict.pop('a') #删除dict中'a':'some value'并将此值赋给ret
17.
列表推导式
相当简洁的过滤一个列表(字典、集合)
strings = ['a','as','bat','car','dove']
[x.upper() for x in strings if len(x)>2] #['BAT','CAR','DOVE']
18.
函数
和C不同,Python的函数可以返回多个值甚至字典:
def f():
a=5
b=6
return{'a':a ,'b':b}
函数亦为对象
对一个字符串进行数据清洗:
states=[’ Alabama ‘,’Geogria!’,’ Geor’,’south car##’,’West s?’]
方法1:
import re
def clean_strings(strings):
result = []
for value in strings:
value = value.strip()
value = value.sub('[!#?]',' ',value)#移除标点符号
value = value.title()
result.append(value)
return result
方法2:将作用在字符串上的一系列操作做成列表
def remove_punctution(value)
return re.sub('[!#?]',' ',value)
clean_ops = [str.strip ,remvoe_punctution , str,title]
def clean_strings(strings ,ops):
result = []
for value in strings:
for function in ops:
value = function(value)
result.append(value)
return result
19.
lambda(匿名)函数
def apply_to_list(some_list ,f)
return [f(x) for x in some_list]
ints = [4,0,5,6]
apply_to_list(ints ,lambda x:x*2)
20.
生成器
直到迭代完成后再一起输出每一次迭代的值,xrange生成的就是一个生成器(range生成的是一个列表对象)
gen = (x ** 2 for x in xrange(100)) #这是一种生成器表达方式
功能和下面这个冗长的生成器等价:
def _make_gen()
for x in xrange(100):
yield x**2
gen = _make_gen()