为什么要学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) #flase4. isiterable:判断某对象是否可迭代
isiterable([1,2,3]) #true isiterable(5) #flase5. 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 #true7. 虚数虚部用 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-expr12. 元组构成的元组:
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) # 213. 列表 可通过方括号[]或者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'并将此值赋给ret17. 列表推导式 相当简洁的过滤一个列表(字典、集合)
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 result19. 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()