Python核心编程 6.序列:字符串、列表和元组

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 列表的特殊特性





你可能感兴趣的:(Python核心编程 6.序列:字符串、列表和元组)