码迷,mamicode.com
首页 > 编程语言 > 详细

Python的序列(字符串,列表和元组)

时间:2015-12-23 12:50:04      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:

序列:字符串,列表和元组

序列有着相同的访问模式:它的每一个元素可以通过指定一个偏移量的方式得到,而多个元素可以通过切片操作的方式一次得到。

序列的操作符

1,成员关系操作符(in,not in)

对字符串来说,就是判断一个字符是否属于这个字符串;对于列表和元组类型来说,就是一个对象是否属于该对象序列。in/not in 返回值为True/False
语法:对象 [not] in 序列

>>> a = abcdef
>>> a in a
True
>>> g in a
False
>>> b = [a,b,c,d]
>>> a in b
True
>>> f in b
False

2,链接操作符(+)

这个操作符允许把一个序列和另一个相同类型的序列做链接
语法:sequence1 + suquence2,返回结果是包含sequence1和sequence2的内容的新序列。
这种方法并不是最高效的。对于字符串,可以把每一个字符放入一个列表或可迭代对象中,然后调用一个join方法,把所有内容链接一起节约内存;对列表来说,更好的是使用列表类型的extend()方法来把多个列表对象合并

>>> a = [abcde,fjig]
>>> ‘‘.join(a)
abcdefjig
>>> b = [jijifjie,gggege]
>>> a.extend(b)
>>> a
[abcde, fjig, jijifjie, gggege]

3,重复操作符(*)

需要一个序列的多份拷贝时候
语法:sequence * copy_int
copy_int 必须是一个整型(不能是长整型),返回一个新的包含多份原对象拷贝的对象

>>> a = abced
>>> a * 2
abcedabced
>>> b = [a,b]
>>> b * 2
[a, b, a, b]

4,切片操作([],[:],[::])

用方括号加一个下标的方式访问它的每一个元素,或者通过在方括号中用冒号把开始下标和结束下标分开的方式访问一组连续的元素。
序列类型是其元素被顺序放置的一种数据结构类型,这种方式允许通过下标的方式获得某一个元素,或者通过指定下标范围来获得一组序列的元素。这种访问序列的方式叫做切片。

访问某一个元素的语法如下:

sequence[index] 
sequence是序列的名字,index是访问元素对象的偏移量
偏移量可以是正值,范围从0到偏移量最大值(序列长度少1),序列长度len()函数可以获得,实际范围 0 <= index <= len(sequence) -1
偏移量可以是复值,范围是 -len(sequence) <= index <= -1。负索引是以序列 的结束为起点的。

>>> name = [join,lilei,daylen]
>>> name[0]
join
>>> name[1]
lilei

访问越界的索引会触发IndexError的异常

>>> name[4]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range

由于Python是面向对象的,可以像下面直接访问一个序列的元素(不用先把它赋值给一个变量)

>>> print (jony,lilei,day)[1]
lilei
一次得到多个元素,语法如下:

sequence[starting_index:ending_index]
通过这种方式可以得到从起始索引到结束索引(不包括结束索引对应的元素)之间的元素,如果没有提供或者用None作为索引,切片操作会从序列的最开始位置到末尾位置

>>> name = [join,lilei,daylen]
>>> name[:]
[join, lilei, daylen]
>>> name[None:None]
[join, lilei, daylen]
>>> name[0:1]
[join]
>>> name[-1:-3]
[]
>>> name[-3:-1]
[join, lilei]
>>> name[-100:100]
[join, lilei, daylen]

从上面的可以看出,即使索引对应的元素不存在也不会报错,即使不符合从小到大也不会报错。

切片操作的步长
>>> a = abcdefg
>>> for i in range(-1,-len(a),-1):
...     print i
...     print a[:i]
... 
-1
abcdef
-2
abcde
-3
abcd
-4
abc
-5
ab
-6
a

如果需要第一次打印显示所有的字符呢:

>>> a = abcdefg
>>> for i in [None]+range(-1,-len(a),-1):
...     print a[:i]
... 
abcdefg
abcdef
abcde
abcd
abc
ab
a

如果上面的例子使用前面说到的extend()方法代替+操作,就会报错,这是因为extend()方法没有返回值的。[None].extend(…)的返回值是None

>>> for i in [None].extend(range(-1,-len(a),-1)):
...     print a[:i]
... 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: NoneType object is not iterable

Python的序列(字符串,列表和元组)

标签:

原文地址:http://www.cnblogs.com/mrylong/p/5069346.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!