美文网首页
第三章 Python的数据结构、函数和文件

第三章 Python的数据结构、函数和文件

作者: ghostdogss | 来源:发表于2019-03-20 14:06 被阅读0次

    3.1数据结构和序列

    元组

    元组是一个固定长度,不可改变的Python序列对象。创建元组的最简单方式,是用逗号分隔一列值:

    In [1]: tup = 4, 5, 6
    
    In [2]: tup
    Out[2]: (4, 5, 6)
    

    用tuple可以将任意序列或迭代器转换成元组:

    In [5]: tuple([4, 0, 2])
    Out[5]: (4, 0, 2)
    
    In [6]: tup = tuple('string')
    
    In [7]: tup
    Out[7]: ('s', 't', 'r', 'i', 'n', 'g')
    

    元组中存储的对象可能是可变对象。一旦创建了元组,元组中的对象就不能修改了:

    In [9]: tup = tuple(['foo', [1, 2], True])
    
    In [10]: tup[2] = False
    ---------------------------------------------------------------------------
    TypeError                                 Traceback (most recent call last)
    <ipython-input-10-c7308343b841> in <module>()
    ----> 1 tup[2] = False
    TypeError: 'tuple' object does not support item assignment
    

    如果元组中的某个对象是可变的,比如列表,可以在原位进行修改:

    In [11]: tup[1].append(3)
    
    In [12]: tup
    Out[12]: ('foo', [1, 2, 3], True)
    

    可以用加号运算符将元组串联起来:

    In [13]: (4, None, 'foo') + (6, 0) + ('bar',)
    Out[13]: (4, None, 'foo', 6, 0, 'bar')
    

    元组乘以一个整数,像列表一样,会将几个元组的复制串联起来:

    In [14]: ('foo', 'bar') * 4
    Out[14]: ('foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'bar')
    

    对象本身并没有被复制,只是引用了它。

    拆分元组

    如果你想将元组赋值给类似元组的变量,Python会试图拆分等号右边的值:

    In [15]: tup = (4, 5, 6)
    
    In [16]: a, b, c = tup
    
    In [17]: b
    Out[17]: 5
    

    即使含有元组的元组也会被拆分:

    In [18]: tup = 4, 5, (6, 7)
    
    In [19]: a, b, (c, d) = tup
    
    In [20]: d
    Out[20]: 7
    

    变量拆分常用来迭代元组或列表序列:

    In [27]: seq = [(1, 2, 3), (4, 5, 6), (7, 8, 9)]
    
    In [28]: for a, b, c in seq:
       ....:     print('a={0}, b={1}, c={2}'.format(a, b, c))
    a=1, b=2, c=3
    a=4, b=5, c=6
    a=7, b=8, c=9
    

    rest的部分是想要舍弃的部分,rest的名字不重要。作为惯用写法,许多Python程序员会将不需要的变量使用下划线:

    In [29]: values = 1, 2, 3, 4, 5
    
    In [30]: a, b, *rest = values
    
    In [31]: a, b
    Out[31]: (1, 2)
    
    In [32]: rest
    Out[32]: [3, 4, 5]
    
    In [33]: a, b, *_ = values
    

    tuple方法

    因为元组的大小和内容不能修改,它的实例方法都很轻量。其中一个很有用的就是count(也适用于列表),它可以统计某个值得出现频率:

    In [34]: a = (1, 2, 2, 2, 3, 4, 2)
    
    In [35]: a.count(2)
    Out[35]: 4
    

    序列函数

    Python有一些有用的序列函数。

    enumerate函数

    因为这么做很常见,Python内建了一个enumerate函数,可以返回(i, value)元组序列:

    for i, value in enumerate(collection):
       # do something with value
    

    sorted函数

    sorted函数可以从任意序列的元素返回一个新的排好序的列表:

    In [87]: sorted([7, 1, 2, 6, 0, 3, 2])
    Out[87]: [0, 1, 2, 2, 3, 6, 7]
    
    In [88]: sorted('horse race')
    Out[88]: [' ', 'a', 'c', 'e', 'e', 'h', 'o', 'r', 'r', 's']
    

    相关文章

      网友评论

          本文标题:第三章 Python的数据结构、函数和文件

          本文链接:https://www.haomeiwen.com/subject/myaapqtx.html