zoukankan      html  css  js  c++  java
  • Python序列(Sequence)

     Sequence是Python的一种内置类型(built-in type),内置类型就是构建在Python Interpreter里面的类型,三种基本的Sequence Type是list(表),tuple(定值表,或翻译为元组),range(范围)。可以看作是Python Interpreter定义了这样三个class。

    字符串也是一种序列

    1,list,表

    Python有一系列的复合数据类型,其中最多才多艺的就是list

    class list([iterable])

    list用方括号括起来,并且用逗号分隔,成员的类型可以是不一样的,但一般是一种类型。

    1.1 list object的构建

    >>> list = []
    >>> list = [1,3]
    >>> list
    [1, 3]

    还可以这样构建

    >>> list()   # empty list
    []
    >>> [x for x in range(11)]    # [x for x in iterable]
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    >>> list((3,5,6))   #  list(iterable)
    [3, 5, 6]

    1.2,改变list元素值

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

    >>> list = [list, 5]
    >>> list
    [[1, 3], 5]
    >>> list[1] = 6
    >>> list
    [[1, 3], 6]

     可以对list进行“切片”slice,得到一个子list,也可以对“切片”进行赋值,改变list

    范围引用的语法是[下限:上限:步长],默认步长是1,从前数下标从0开始,从后数下标从-1开始

    >>> list = [1,2,3,4,5]
    >>> list[2:4]
    [3, 4]
    >>> list[-3:]
    [3, 4, 5]

    对切片进行赋值,改变list

    >>> list
    [1, 2, 3, 4, 5]
    >>> list[3:] = [5,4]
    >>> list
    [1, 2, 3, 5, 4]

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

    2,tuple

    tuple是不可变的(immutable)

    class tuple([iterable])

    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])  # 生成 (3,4,5)

    iterable可以是任何支持iteration的Sequence,Container。上面我们使用的参数是list [3,4,5],也可以就是用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[i] = start + i * step 且 r[i] < stop; step为负时,r[i] > stop

    >>> range(6)
    [0, 1, 2, 3, 4, 5]
    >>> 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异常。

    6. 要得到一个Sequence的长度

    用Python的内置函数 len(). 不仅Sequence, Dictionary的长度也是用len()

    -----------------

    参考:

    http://www.cnblogs.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   

  • 相关阅读:
    ASP.NET MVC —— Model之一模型模板
    【转】METADATATYPE的使用,MVC的MODEL层数据验证
    bootstrap 全局 CSS 样式
    jQuery EasyUI API 中文文档
    基础知识--:before伪元素和:after伪元素
    960CSS框架,之前有用过 了解下框架基本原理
    CSS框架960Grid从入门到精通一步登天
    web网页的表单排版利器--960css
    文本编辑器Nano实用快捷键
    yum服务器设置
  • 原文地址:https://www.cnblogs.com/livingintruth/p/3254654.html
Copyright © 2011-2022 走看看