python基础教程:元组

作者: 一墨编程学习 | 来源:发表于2019-05-10 22:45 被阅读8次

    元组(元组)跟列表(名单)非常相似,二者之间的差异就是元组不可改变,列表是可以改变的。

    创建元组(元组)

    跟列表的中括号不同,元组用圆括号把所有项括起来,元素之间用逗号分隔:

    In [15]: mytuple = ('a', 'b', 3, 8.9, [1,2])
    
    In [16]: mytuple
    Out[16]: ('a', 'b', 3, 8.9, [1, 2])
    
    In [17]: x = ('a', )  # 只有一个元素的元组
    In [18]: y = ()  # 空元组
    
    

    元组(元组)的索引(索引)

    元组的索引机制跟列表完全一样,看下面的示例:

    In [22]: mytuple[0]
    Out[22]: 'a'
    
    In [23]: mytuple[1]
    Out[23]: 'b'
    
    In [24]: mytuple[3]
    Out[24]: 8.9
    
    

    同样,元组也有负索引:

    In [25]: mytuple[-1]
    Out[25]: [1, 2]
    
    In [26]: mytuple[-2]
    Out[26]: 8.9
    
    

    Python的元组的索引可以是正索引(从头到尾),也可以是负索引(从尾到头),总结为下面的关系:

    元组:  ('a', 'b', 'c', 'd', 'e')
             |    |    |    |    |
    正索引:  0    1    2    3    4
    负索引:  -5  -4   -3   -2   -1
    
    

    因为元组是不可修改的,我们通过索引企图修改元素时,就会报错:

    In [116]: x = ('a', 1, [1,2])
    
    In [117]: x[1] = 2
    --------------------------------------------
    TypeError    Traceback (most recent call last)
    <ipython-input-117-fe7b4192b649> in <module>
    ----> 1 x[1] = 2
    
    TypeError: 'tuple' object does not support item assignment
    
    In [118]: x[2][1] = 3  #修改的不是元组,而是list
    
    In [119]: x
    Out[119]: ('a', 1, [1, 3])
    
    In [121]: x[2] = ['a', 'b']  # 此处企图修改第三个元素,报错!
    --------------------------------
    TypeError    Traceback (most recent call last)
    <ipython-input-121-339ad61923f7> in <module>
    ----> 1 x[2] = ['a', 'b']
    
    TypeError: 'tuple' object does not support item assignment
    
    

    但是,我们修改元组中的列表时却成功了。元组x的前两个元素'a',1都是不可变的,而第三个元素是list,这个列表是可以改变的,但不能把第三个元素赋值为其它列表(上面示例中最后一个操作)或其它任何类型的数据。

    元组(元组)的切片(切片)

    元组的切片跟列表也是一样的

    In [27]: mytuple[1:3]
    Out[27]: ['b', 3]
    
    In [28]: mytuple[:3]
    Out[28]: ['a', 'b', 3]
    
    In [29]: mytuple[1:]
    Out[29]: ['b', 3, 8.9, [1, 2]]
    
    In [30]: mytuple[:]
    Out[30]: ['a', 'b', 3, 8.9, [1, 2]]
    
    

    上面例子中,切片范围的起止索引可以是缺失的,左边缺失就是从头(0)开始,右边缺失就是后面的全部。

    元组(元组)运算符

    元组的运算符跟列表也一样:

    运算符 含义 表达式 结果
    + 合并在一起 ('a', 'b', 'c') + (1, 2, 3) ('a', 'b', 'c', 1, 2, 3)
    * 重复 ('a',) * 3 ('a', 'a', 'a')
    in 是否为元素 'a' in ('a', 'b') True

    从头到尾遍历(迭代)一个tuple的语法是for x in the-tuple::

    for x in (1, 2, 3):
        print(x)
    
    

    删除元组(元组)

    (1)删除整个元组

    In [35]: mytuple = ['a', 'b', 3, 8.9, [1,2]]
    
    In [36]: del mytuple
    
    In [37]: mytuple
    ---------------------------------------------------------------------------
    NameError    Traceback (most recent call last)
    <ipython-input-37-1dc2d082cc20> in <module>
    ----> 1 list_a
    
    NameError: name 'list_a' is not defined
    
    

    由于元组是不可改变的,我们就不能像列表那样,使用del来删除元型态组的元素。

    In [127]: x = ('a', 1, [1,2])
    
    In [128]: del x[0]
    --------------------------------
    TypeError     Traceback (most recent call last)
    <ipython-input-128-ec9e6e663ef5> in <module>
    ----> 1 del x[0]
    
    TypeError: 'tuple' object doesn't support item deletion
    
    

    元组相关的内置函数

    (1)len()
    计算元组的长度,即计算元组元素的个数)

    In [55]: len([1,2,3])
    Out[55]: 3
    
    

    (2)max()
    返回元组元素中的最大值,元组元素必须是同一类型且可比较,比如都是数字型的,或都是字符串,如果类型不统一就会报错:

    In [57]: max(('a', 'b', 'c'))
    Out[57]: 'c'
    
    In [58]: max((1,2,'a'))
    ---------------------------------------------------------------------------
    TypeError   Traceback (most recent call last)
    <ipython-input-58-d6e404f692f3> in <module>
    ----> 1 max((1,2,'a'))
    
    TypeError: '>' not supported between instances of 'str' and 'int'
    
    

    (3)min()
    返回元组元素中的最小值。元素类型要求跟max()一样。

    In [59]: min((1,2,3))
    Out[59]: 1
    
    In [60]: min(('a', 'b', 'c'))
    Out[60]: 'a'
    
    In [61]: min((1,2,'a'))
    ---------------------------------------------------------------------------
    TypeError    Traceback (most recent call last)
    <ipython-input-61-c2d30ec5fffc> in <module>
    ----> 1 min((1,2,'a'))
    
    TypeError: '<' not supported between instances of 'str' and 'int'
    
    

    (4)sum()
    计算元组所有元素的和,其元素类型必须是数值型的(整数,浮点数)

    In [63]: sum((1,2,3))
    Out[63]: 6
    
    In [64]: sum((1.2, 3.2, 4.3))
    Out[64]: 8.7
    
    In [65]: sum(('a', 'b', 'c'))
    ---------------------------------------------------------------------------
    TypeError   Traceback (most recent call last)
    <ipython-input-65-f2e6eb2051e3> in <module>
    ----> 1 sum(('a', 'b', 'c'))
    
    TypeError: unsupported operand type(s) for +: 'int' and 'str'
    
    

    (5)sorted()
    返回一个排序的列表,但并不改变原元组。

    In [66]: sorted((3, 9, 0, 5))
    Out[66]: [0, 3, 5, 9]
    
    In [68]: sorted(('python', 'yuanrenxue', 'good'))
    Out[68]: ['good', 'python', 'yuanrenxue']
    
    

    (6)tuple()
    生成一个空元组,或把其它类型数据转换成元组。

    In [69]: tuple()
    Out[69]: ()
    
    In [70]: tuple('python')
    Out[70]: ('p', 'y', 't', 'h', 'o', 'n')
    
    

    (7)any()
    只要元组中有一个元素是True就返回True。

    In [72]: any((0, '', '3'))
    Out[72]: True
    
    

    (8)all()
    只有元组所有元素为True才返回True。

    In [73]: all((0, '', '3'))
    Out[73]: False
    
    In [74]: all((3, 'a', True))
    Out[74]: True
    
    

    元组(元组)的内置方法

    由于元组的不可改变,它的方法也比列表少了很多,只有两个:

    index(v)返回第一个值为v的元素的索引;
    count(v)返回值为v的元素的个数。

    In [138]: x = (1,3,2,6,2,4)
    
    In [139]: x.index(2)
    Out[139]: 2
    
    In [140]: x.count(2)
    Out[140]: 2
    
    

    元组的拆包(开箱)

    Python的中如果要初始化多个变量,可以用下面的方式:

    In [141]: a,b,c,d = 1,2,3,4
    
    In [142]: a,b,c,d
    Out[142]: (1, 2, 3, 4)
    
    

    以上代码给A,B,C,d分别赋值1,2,3,4,这时候一个是1,B是2,C是3,d是4

    还有更绝的拆包方法,就是那星用号*来吸收多余的元素:

    In [146]: x = (1,2,3,4,5)
    
    In [147]: a, *b = x # x有5个元素,左边变量只有两个,多余的都被带*的b吸收了
    
    In [148]: a, b
    Out[148]: (1, [2, 3, 4, 5])
    
    In [149]: a, *b, c = x #多亏带*的b
    
    In [150]: a,b,c
    Out[150]: (1, [2, 3, 4], 5)
    
    In [151]: *a, b, c = x #多亏带*的a
    
    In [152]: a,b,c
    Out[152]: ([1, 2, 3], 4, 5)
    
    In [153]: a,b,c = x #没有带*的,x的5个元素无法匹配3个变量
    ---------------------
    ValueError     Traceback (most recent call last)
    <ipython-input-153-58e3b82a91cc> in <module>
    ----> 1 a,b,c = x
    
    ValueError: too many values to unpack (expected 3)
    
    

    总结

    元组跟列表非常相似,前者不能被修改,后者随便改。

    大家在学python的时候肯定会遇到很多难题,以及对于新技术的追求,这里推荐一下我们的Python学习扣qun:784758214,这里是python学习者聚集地!!同时,自己是一名高级python开发工程师,从基础的python脚本到web开发、爬虫、django、数据挖掘等,零基础到项目实战的资料都有整理。送给每一位python的小伙伴!每日分享一些学习的方法和需要注意的小细节

    相关文章

      网友评论

        本文标题:python基础教程:元组

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