本文是 Python 机器学习基础系列文章的第一篇——Python 篇。
Python
任何一门编程语言,入门学习的基础知识包括:数据类型、控制流、函数、模块化、类,以及一些常用的零碎语法。Python 亦不例外。
数据类型
基本数据类型
包括布尔型(bool)、整型(int)、长整型(long)、浮点型(float)、复数(complex)五种。
- 内置常量:
False
,True
,None
,NotImplemented
,Ellipsis
,__debug__
布尔型(bool):只有两个值
True
和False
,每个 Python 对象都天生具有布尔值,None
,False
,0
,0L
,0.0
,0.0+0.0j
,''
,[]
,()
,{}
值为False
,自定义类在方法__nonzero__()
或__len__()
中返回布尔值,此外其他对象的布尔值都为True
,在数值运算中True
和False
值为1
和0
,布尔操作包括and, or, not, !=, is, is not
整型(int):等价于 C 语言中的
long
类型,与系统能表示的最大整型一致,包括十进制、八进制(数字0
开头)、十六进制(0x
或0X
开头),可通过bin
,oct
,hex
转换进制,可进行/
,//
,**
等运算长整型(long):是整型的超集,可以表示无限大的整数,在整数后加
L
或l
来表示如a = 999 ** 8
,pow(2L, 5L)
等浮点型(float):等价于 C 中的
double
,其精度信息和内部表示可以从sys.float_info
中获得,可以用十进制或科学计数法(1e-2
等)表示复数(complex):
c = 08.333-1.47j
,c.real
,c.imag
,c.conjugate()
,abs(c)
容器
容器是数据的集合。Python 的容器,除字符串(string)外,主要包括四种:元组(tuple),列表(list),字典(dict)和集合(set)。其中,字典和集合是无序容器,而元组、列表和字符串都是有序容器,支持索引(index)和切片(slicing)操作。此外,字符串、元组和集合是不可变容器,而列表和字典是可变容器。不可变容器通常比可变容器(如 list)更为高效。
下面介绍这五种容器:
字符串(str):使用单引号(
'hello'
)、双引号("hello"
)或三引号('''hello'''
)定义。三引号可定义多行字符串。包含startswith
等方法。元组(tuple):圆括号与逗号分隔定义(也可以不带括号),如
t = (0, "two", 3.0, "four", (5,6))
。必须在定义时初始化且内容和长度不可变。0 个元素的元组这么定义a = ()
,1 个元素的元组这么定义a = (2 ,)
,元素可以是不同类型。tuple 也常用来打包一组变量如t = (i, s, f)
,ii, ss, ff = t
。print
函数%
后的部分其实就是元组,如print '%s is %d years old' % (name, age)
。列表(list):方括号与逗号分隔定义,如
l = [1, (2,3), "hello"]
。也可以通过list
函数来构造,此时需要传入一个元组或字符串,如l = list((1,2,3)), a = list("hello")
。list 与 tuple 的区别在于其内容和长短可变,通过append
来添加元素,通过del
命令删除,如del l[0]
。list 包含append
,sort
,pop
,count
,reverse
等成员函数。字典(dict):花括号与逗号分隔来定义,如
d = { 'name': 'John', 'age': 18, 'feat': (1,3,'tall')}
,每个字典项用冒号隔开 key 与 value。可用索引操作符[]
来寻址一个键,或者对其赋值,也可用del d['key']
将某项删除。集合(set):集合是无序不重复元素集,通过
set()
函数来定义,传入一个字符串、元组、列表或字典,如s = set([1, 2, "hello"])
,传入字符串时构建不重复字符集合,传入字典时默认用 keys 构建集合。集合支持并集(|
)、交集(&
)、差集(-
)、对称差集(^
)运算符,包含add
,update
,remove
,issubset
,isuperset
,copy
,clear
等子函数。
索引与切片
索引(index):序列容器(tuple, list, string, unicoe, frozenset)都可以通过索引操作符
[]
来存取元素。索引从 0 开始,也可以是负数,表示倒数第几个元素。如t[0], t[-1], t[-2]
分别表示第一个、最后一个与倒数第二个元素。切片(slice):切片是同时取容器内某个索引范围的多个元素。形式为
t[start:end:step]
,注意end
是结束位置索引 + 1
,如t[0:-3:2]
。可以省略三个值里的一个或多个,如a[2:7]
,l[0::2]
,t[:-1]
等。连接:序列容器(string, tuple, list)的加法(
+
)表示序列的连接而非容器求和。如a = (1, 2, 3) + (4, 5, 6)
则