13916729435 发表于 2015-4-27 07:26:29

Python序列(Sequence)

  Sequence是Python的一种内置类型(built-in type),内置类型就是构建在Python Interpreter里面的类型,三种基本的Sequence Type是list(表),tuple(定值表,或翻译为元组),range(范围)。可以看作是Python Interpreter定义了这样三个class。
  字符串也是一种序列
  1,list,表
  Python有一系列的复合数据类型,其中最多才多艺的就是list
  class list()
  list用方括号括起来,并且用逗号分隔,成员的类型可以是不一样的,但一般是一种类型。
  1.1 list object的构建



>>> list = []
>>> list =
>>> list

  还可以这样构建



>>> list()   # empty list
[]
>>>     # [x for x in iterable]

>>> list((3,5,6))   #list(iterable)

  
  1.2,改变list元素值
  list和string不一样的是,string是不可变(immutable)的类型,list是可变的(mutable),可以对list整体或一部分进行改变



>>> list =
>>> list
[, 5]
>>> list = 6
>>> list
[, 6]
  可以对list进行“切片”slice,得到一个子list,也可以对“切片”进行赋值,改变list
  范围引用的语法是[下限:上限:步长],默认步长是1,从前数下标从0开始,从后数下标从-1开始



>>> list =
>>> list

>>> list[-3:]

  对切片进行赋值,改变list



>>> list

>>> list =
>>> list

  从上面可一看到,对于改变list内容的操作,如赋值,都没有打印结果,也就是表达式返回的None常量。这是Python对可变数据结构(mutable Data Structure)的设计原则。
  
  2,tuple
  tuple是不可变的(immutable)
  class tuple()
  tuple的构建



seq = ()或seq = tuple()   #构建empty tuple
seq = (4,)或4,   #构建只有一个元素的tuple (4),逗号是必不可少的,不然会返回数字4
seq = (3,4,5) 或seq = 3,4,5
seq =tuple()# 生成 (3,4,5)
  
  iterable可以是任何支持iteration的Sequence,Container。上面我们使用的参数是list ,也可以就是用tuple(3,4,5)
  对于tuple来说,重要的是逗号",",而不是括号,从上面我们可以看到括号没有歧义可以省去,但是有些地方必须要,比如:
  f(a,b,c)表示这个函数接受三个参数
  而f((a,b,c))表示这个函数接受一个参数,这个参数是一个三元的tuple。
  
  tuple是不可被赋值的,所以tuple常用来做不同type(异质)的元素的序列集合,而list就常用来做相同type(同质)的元素集合。
  
  3,range
  range也是一种类型(type),它是一个数字的序列(s sequence of numbers),而且是不可变的,通常用在for循环中
  class range(stop)
  class range(start, stop [, step])
  对于第一种构造方式,start默认值为0,step默认值为1
  当step为正时,一个range的元素值为r = start + i * step 且 r < stop; step为负时,r > stop



>>> range(6)

>>> tuple(range(0,-10,-2))
(0, -2, -4, -6, -8)

  
  4.多重赋值(multiple assignment)
  多重赋值就是这样的赋值表达式。



1 t = a,b,c
2 a,b,c = t
  而多重赋值本质就是tuple packing (元组打包)和 Sequence unpacking(序列解包)。
  >>> t = a, b, c      #这就是tuple packing,按照tuple的构建的语法,我们知道这里t肯定是个tuple。
  >>>a, b, c= t      #这就是Sequence unpacking,这里t只要是三元的Sequence就可以了,不一定是tuple,如果t不是三元的,会抛出一个ValueError异常。
  
  -----------------
  参考:
  http://www.iyunv.com/vamei/archive/2012/05/28/2522677.html    Vamei的博客
  http://docs.python.org/3/library/stdtypes.html#sequence-types-list-tuple-range      Python文档,内置类型Sequence
  http://docs.python.org/3/tutorial/datastructures.html#tuples-and-sequences   Python文档,tutorial
页: [1]
查看完整版本: Python序列(Sequence)