列表和字符串有很多通用的属性,例如索引和切割操作。它们是序列数据类型的两个示例。Python是一种不断发展的语言,因此可能会添加其他序列数据类型。还有另一种标准序列数据类型:元组。

元组由数个逗号分隔的值组成,示例:

>>> t = 12345, 54321, 'hello!'
>>> t[0]
12345
>>> t
(12345, 54321, 'hello!')
>>> # Tuples may be nested:
... u = t, (1, 2, 3, 4, 5)
>>> u
((12345, 54321, 'hello!'), (1, 2, 3, 4, 5))
>>> # Tuples are immutable:
... t[0] = 88888
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> # but they can contain mutable objects:
... v = ([1, 2, 3], [3, 2, 1])
>>> v
([1, 2, 3], [3, 2, 1])

元组在输出时总是有括号的,以便于正确表达嵌套结构。在输入时可以有或没有括号,不过经常括号都是必须的(如果元组是一个更大表达式的一部分)。不能给元组的一个独立的元素赋值(可以通过联接和切割来模拟)。还可以创建包含可变对象(如列表List)的元组。

修改元组

元组中的元素值是不允许呗修改的,但是可以通过对元组进行连接组合,具体示例:

>>> sz1 = (123456, 654321);
>>> sz2 = ('abc', 'xyz')
# 以下修改元组元素操作是非法的
# sz1[0] = 100
# 创建一个新的元组
>>> sz12 = sz1 + sz2;
>>> print (sz12)
(12, 34.56, 'abc', 'xyz')

尽管元组和列表很类似,但它们经常被用来在不同的情况和不同的用途。元组是不可变的。通常包含不同种类的元素并通过分拆或索引访问(如果是namedtuples,甚至可以通过属性)。列表是可变的,它们的元素通常是相同类型的,并通过遍历列表进行访问。

一个特殊的问题是构造包含零个或一个元素的元组:为了适应这种情况,语法上有一些额外的改变。空的元组由空的一对括号构成;要创建一个单元素元组可以在值后面跟一个逗号(仅在括号中括起单个值是不够明确的)。粗糙但是有效。示例:

>>> empty = ()
>>> singleton = 'hello',    # <-- note trailing comma
>>> len(empty)
0
>>> len(singleton)
1
>>> singleton
('hello',)

语句 t = 12345, 54321, 'hello!' 是元组封装(tuple packing)的一个例子:值1234554321'hello!&#39; 被封装进元组。其逆操作可能是这样:

>>> x, y, z = t

这个调用等号右边可以是任何线性序列,称之为 序列拆封非常恰当。序列拆封要求左侧的变量数目与序列的元素个数相同,因为序列中有元素。要注意的是可变参数(multiple assignment)其实只是元组封装和序列拆封的一个组合。

删除元组

元组中的元素值是不允许删除的,但我们可以使用del语句来删除整个元组,如下实例:

#!/usr/bin/python3
>>> tup = ('Google', 'Runoob', 1997, 2000)
>>> print (tup)
>>> del tup;
>>> print ("删除后的元组 tup : ")
>>> print (tup)

此后再引用命名tup会引发错误(直到另一个值赋给它为止),输出变量会有异常信息,输出如下所示:

Traceback (most recent call last):
  File "test.py", line 8, in <module>
    print (tup)
NameError: name 'tup' is not defined

关注下方微信公众号“Java精选”(w_z90110),回复关键词领取资料:如Mysql、Hadoop、Dubbo、Spring Boot等,免费领取视频教程、资料文档和项目源码。

Java精选专注程序员推送一些Java开发知识,包括基础知识、各大流行框架(Mybatis、Spring、Spring Boot等)、大数据技术(Storm、Hadoop、MapReduce、Spark等)、数据库(Mysql、Oracle、NoSQL等)、算法与数据结构、面试专题、面试技巧经验、职业规划以及优质开源项目等。其中一部分由小编总结整理,另一部分来源于网络上优质资源,希望对大家的学习和工作有所帮助。

评论

分享:

支付宝

微信