6.1 序列
6.1.2 序列类型操作符
seq[ind]:获得下标为ind的元素
seq[ind1:ind2]:获得下标从ind1到ind2间的元素集合
seq*expr:序列重复expr次
seq1+seq2:连接序列seq1和seq2
obj in seq:判断obj元素是否包含在seq中
obj not in seq:判断obj元素是否不包含在seq中
--成员关系操作符(in, not in)
成员关系操作符使用来判断元素是否属于一个序列的。比如对字符串类型来说,就是判断一个字符是否属于这个字符串,对列表和元组类型来说,就代表了一个对象是否属于该对象是否属于该对象序列。in/not in 操作符的返回值一般来讲就是True/False,满足成员关系就返回True, 否则返回False。
--切片操作符([], [:], [::])
我对切片一直运用不太熟练,所以这里仔细研读一下。
>>> a = '123456789' >>> a[2:4] '34' >>> a[2:-4] '345' >>> a[2:] '3456789' >>> a[-2:] '89' >>> a[:2] '12' >>> a[:-2] '1234567'
list[a:b]的这种类型:截取list中的元素从a开始到b结束。如果a为空,则默认为0;如果b为空,则默认为序列的长度。
>>> a[2::] '3456789' >>> a[::2] '13579' >>> a[2::3] '369'
list[a::b]的这种类型:从第a个开始,隔b取一次元素。如果a或者b为空,则默认为0。
>>> a[:5:2] '135' >>> a[:5:-2] '97'
list[:a:b]的这种类型:若b为正数,则前a个数,每隔b个数取值;若b为负数,则从序列最后到a这个元素,每隔b个数取值。
6.1.3 内建函数(BIFs)
序列本身就内涵了迭代的概念,之所以会这样,是因为迭代这个概念就是从序列,迭代器,或者其他支持迭代操作的对象泛化得来的。由于python的for循环可以遍历所有的可迭代类型。
--类型转换
list(iter)把可迭代对象转换为列表
str(obj)把obj对象转换成字符串
tuple(iter)把一个可迭代对象转换成一个元组对象
为什么Python里面不简单的把一个对象转换成另一个对象呢?一旦一个python的对象被建立,我们就不能更改其身份或类型了。如果吧一个列表对象传给list()函数,便会创建这个对象的一个浅拷贝,然后将其插入新的列表中。
所谓浅拷贝就是只拷贝了对对象的索引,而不是重新建立了一个对象!如果想要完全的拷贝一个对象(包括递归),则需要用到深拷贝。
内建函数
enumerate(iter):接受一个可迭代对象作为参数,返回一个 enumerate 对象(同时也是一个迭代器),该对象生成由 iter 每个元素index 值 和 item 值组成的元组
len(seq):返回 seq 的长度
max(iter,key=None) or max(arg0,arg1...,key=None):返回iter或(arg0,arg1,...)中的最大值,如果指定了key,这个 key 必须是一个可以传给 sort()方法的,用于比较的回 调函数.
min(iter, key=None) or min(arg0, arg1.... key=None):返回 iter 里面的最小值;或者返回(arg0,arg2,...)里面的最小值;如果指定了 key,这个 key 必须是一个可以传给 sort()方法的,用于比较的回调函数.
reversed(seq):接受一个序列作为参数,返回一个以逆序访问的迭代器
sorted(iter, func=None, key=None, reverse=False):接受一个可迭代对象作为参数,返回一个有序的列表;可选参数 func,key 和 reverse 的含义跟 list.sort()内建函数的参数含义一 样.
sum(seq, init=0):返 回 seq 和 可 选 参 数 init 的 总 和 , 其 效 果 等 同 于 reduce(operator.add,seq,init)
zip([it0, it1,... itN]):返回一个列表,其第一个元素是 it0,it1,...这些元素的第 一个元素组成的一个元组,第二个...,类推.
>>> alist = ['a', 'b', 'c'] >>> blist = [1,2,3] >>> z = zip(alist, blist) >>> z [('a', 1), ('b', 2), ('c', 3)] >>> for m,n in zip(alist, blist): ... print m, n ... a 1 b 2 c 3 >>> for m,n in enumerate(alist): ... print m, n ... 0 a 1 b 2 c
6.2 字符串
--字符串的创建和赋值
创建一个字符串就想使用一个标量一样简单.
>>> aString = 'Hello world!' >>> anotherString = 'Python is cool!' >>> print aString Hello world! >>> anotherString 'Python is cool!' >>> s = str(range(4)) >>> s '[0, 1, 2, 3]'
--访问字符串的值(切片的方式)
6.6 内建函数
string.capitalize() 把字符串的第一个字符大写
string.center(width) 返回一个原字符串居中,并使用空格填充至长度width的新字符串
string.count(str, beg = 0, end = len(string)) 返回str在string里面出现的次数,如果beg或者end指定则返回指定范围内str出现的次数
string.endswith(obj, beg = 0, end = len(string))检查字符串是否以obj结束,如果beg或者end指定则检查指定的范围内是否以obj结束,是返回True,否则返回False
string.find(str, beg = 0, end = len(string)) 检查str是否包含在string中,如果beg和end指定范围,则检查是否包含在范围内,如果是返回开始的索引值,否则返回-1
string.index(str, beg = 0, end = len(string)) 跟find方法一样,只不过如果str不在string中会报一个异常
string.isalnum() 如果string至少有一个字符并且所有字符都是字母或数字则返回True,否则返回False
string.isalpha() 如果string至少有一个字符并且所有字符都是字母则返回True,否则返回False
string.isdigit() 如果string只包含数字则返回True,否则返回False
string.islower() 如果string中包含至少一个区分大小写的字符,并且所有这些字符都是小写,则返回True,否则返回False
string.isnumeric() 如果string中只包含数字字符,则返回True,否则返回False
string.isspace() 如果string中只包含空格,则返回True,否则返回False
等等,不全部抄上来了
内建函数
cmp():
>>> a = ['123', 'abc'] >>> b = ['123'] >>> cmp(a,b) 1 >>> cmp(b,a) -1 >>> cmp(a,a) 0
len(), max(), min()省略
sorted(), reversed():
>>> alist = ['123', '456', 'qwe', '2se'] >>> sorted(alist) ['123', '2se', '456', 'qwe'] >>> for i in reversed(alist): ... print i ... 2se qwe 456 123
enumerate(), zip()省略
sum():
>>> alist = [1,2,3.0,5] >>> sum(alist) 11.0 >>> sum(alist,3) 14.0
6.15 列表的特殊特性