资讯专栏INFORMATION COLUMN

python基础教程:元组

walterrwu / 2794人阅读

摘要:计算元组所有元素的和,其元素类型必须是数值型的整数,浮点数返回一个排序的列表,但并不改变原元组。只有元组所有元素为才返回。

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

创建元组(元组)

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

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)
 in 
----> 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)
 in 
----> 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)
 in 
----> 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)
 in 
----> 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)
 in 
----> 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)
 in 
----> 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)
 in 
----> 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)
 in 
----> 1 a,b,c = x

ValueError: too many values to unpack (expected 3)
总结

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/43776.html

相关文章

  • Python基础教程第二版》第二章-Python列表和元祖

    摘要:第二个索引元素不在分片内。显示操作索引指向第个元素,第个元素不存在。序列加法乘法表示个空列表空列表用初始化成员资格运算符布尔运算符,检查值是否在序列中。修改列表,没有返回值。在原位置对列表排序。 序列 例: Edward = [abc, 12] 序列中的所有元素都是有编号的,从0开始递增。 Note: 使用负数索引-1,Python会从右边,也就是从最后一个元素开始计数。最后一个元素...

    darryrzhong 评论0 收藏0
  • Python基础到入门】Python基础语法篇——基本数据类型【文末送书】

    摘要:布尔值布尔值和布尔代数的表示完全一致,一个布尔值只有两种值的数据类型可以通过内置的函数查询,例如还可以用来判断和的区别在于不会认为子类是一种父类类型。会认为子类是一种父类类型。基本功能是进行成员关系测试和删除重复元素。 ...

    Winer 评论0 收藏0
  • ❤️爆肝十二万字《python从零到精通教程》,从零教你变大佬❤️(建议收藏)

    文章目录 强烈推荐系列教程,建议学起来!! 一.pycharm下载安装二.python下载安装三.pycharm上配置python四.配置镜像源让你下载嗖嗖的快4.1pycharm内部配置 4.2手动添加镜像源4.3永久配置镜像源 五.插件安装(比如汉化?)5.1自动补码神器第一款5.2汉化pycharm5.3其它插件 六.美女背景七.自定义脚本开头八、这个前言一定要看九、pyt...

    booster 评论0 收藏0
  • Python0基础(上)——期末不挂科

    摘要:易于维护的成功在于它的源代码是相当容易维护的。可移植基于其开放源代码的特性,已经被移植也就是使其工作到许多平台。集合集合是由一个或数个形态各异的大小整体组成的,构成集合的事物或对象称作元素或是成员。基本功能是进行成员关系测试和删除重复元素。 ...

    Ajian 评论0 收藏0

发表评论

0条评论

walterrwu

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<