python元组类型
元组类型简介
使用括号包围的数据结构是元组(tuple)。例如:
>>> (1,2,3)
(1, 2, 3)
>>> T = (1,2,3,)
>>> T
(1, 2, 3)
元组和列表一样,都是容器型的数据结构,且都是序列,所以容器中的元素都是按照索引位置有序存放的。所以,可以进行索引取值、切片等序列通用操作。
不同的是,元组是不可变序列,无法原处修改,意味着修改元组必须创建新的元组对象。实际上元组的概念来源于数学,在关系型数据库中用来表示一行数据对象,而行数据对象是固定不变的完整、稳定结构,python的元组也一样隐含的是完整性、稳定性。
不可变序列同样意味着可以使用hash()内置函数进行hash,也就是说它是hashable的。
hashable的类型是稳定的数据,可以放在一些需要稳定结构的地方,比如Set、dict的key,它们内部都是通过hash后的数据存放的。hashable意味着不同对象的hash值不同。比如类的实例对象全都是不同的,之所以不同是因为它们默认就是hashable的,不同对象的hash值不同。
元组的结构
元组可以看作是不可变的列表。它们的结构非常类似,都是在容器中存放元素的引用地址。
它的结构图如下:
这个结构图什么意思,这里不再赘述,如有需要,参考我对列表的介绍文章。
因为元组是不可变对象,所以修改元组数据会报错。也就是说,元组中的保存的引用地址是不可变的。
>>> T = (1111,2222,3333,4444)
>>> T[0] = 11111
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
构造元组
直接使用括号包围元素即可,或者使用元组的构造函数tuple()将数据转换成元组。例如:
>>> (1,2,3,4)
(1, 2, 3, 4)
>>> tuple("abcdef")
('a', 'b', 'c', 'd', 'e', 'f')
>>> tuple([1,2,3,4])
(1, 2, 3, 4)
括号中可以加一个尾随逗号:
>>> 1
1
需要注意的是,python中很多地方隐式地自动构造元组。它的隐式构造规则是这样的:如果没有指定括号,又有多个值,那么就使用元组作为容器。
>>> 1,2
(1, 2)
再者,为了区分没有括号的元组和单个数据对象,可以在想要作为元组元素的数据后面加上逗号。例如:
>>> 1, # 元组
(1,)
>>> (1,) # 元组
(1,)
>>> 1 # 单个数据
1
>>> (1) # 单个数据
1
元组中可以嵌套任意类型的数据对象:
>>> (1,2,(3,4))
(1, 2, (3, 4))
>>> (1,2,[3,4])
(1, 2, [3, 4])
操作元组
元组是不可变的序列。序列意味着它的元素是按索引位置有序的,序列的通用操作元组都可以使用,不可变序列意味着那些序列的修改行为都不能用,但是却可以使用hash()内置函数对元组进行hash。
关于序列有哪些通用操作,哪些是不可变序列具有的操作,哪些是可变序列具有的操作,详细内容参见:Python中的序列操作。
这里简单介绍一点基本操作。
元组支持+ *
符号操作:
>>> T = (1,2,3,4)
>>> T1 = ('a','b','c')
>>> T + T1
(1, 2, 3, 4, 'a', 'b', 'c')
>>> (1,2) + tuple("34")
(1, 2, '3', '4')
>>> T * 2
(1, 2, 3, 4, 1, 2, 3, 4)
>>> 2 * T
(1, 2, 3, 4, 1, 2, 3, 4)
可以通过+=
的方式进行二元赋值:
>>> T1 = (1,2,3)
>>> T2 = (4,5,6)
>>> T1 += T2
>>> T1
(1, 2, 3, 4, 5, 6)
元组是序列,序列类型的每个元素都是按索引位置进行存放的,所以可以通过索引的方式取得元组中的各个元素,通过切片的方式取得子元组:
>>> T = (1,2,3,4,5)
>>> T[0]
1
>>> T[:3]
(1, 2, 3)
>>> T[:]
(1, 2, 3, 4, 5)
>>> T[2:-1]
(3, 4)
但不能赋值,因为元组是不可变对象。
>>> T = (1,2,3,4)
>>> T[0] = 11
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
因为元组是不可变对象,所以可以使用hash()进行hash:
>>> hash(T)
-1883319094
>>> hash((1,2,3))
-378539185
>>> hash([1,2,3])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
修改元组
因为元组是不可变对象,所以没有直接方法修改元组,只能通过其它手段根据原始元组间接地构造新元组。切片返回的元组也是一种修改方式。
另外,要修改元组,可以考虑将元组转换成可变的列表,修改之后再转换回元组。例如:
>>> t = ('a','b','c','d')
>>> tmp = list(t)
>>> tmp[2] = "cc"
>>> t = tuple(tmp)
>>> t
('a', 'b', 'cc', 'd')
或者,通过解析的方式构造新元组,但元组解析必须注意的是元组的括号特殊性,因为它会被当作表达式的包围括号,而不是元组的构造括号。所以,只能使用tuple()包围解析表达式。
>>> T = (1,2,3,4,5)
>>> tuple( i * 2 for i in T)
(2, 4, 6, 8, 10)
>>> ( i * 2 for i in T) # 不是元组,而是表达式括号
<generator object <genexpr> at 0x03572150>
python元组类型的更多相关文章
- Python元组类型、字典类型及常用操作
一.元组类型 1.用途 记录多个值,当多个值没有改的需求,此时用元组更合适,Python的元组与列表类似,不同之处在于元组的元素不能修改. 2.定义方式 在()内用逗号分隔开多个任意类型的值 t=(1 ...
- python元组类型的变量以及字符串类型的变量作为参数进行传值
今天做selenium元素对象剥离时(我把元素对象都放到了元组类型的变量中,格式:user = (“id”,“X-Auto-2”)),遇到一个元组变量,以及str字符串变量一起作为参数传值的问题,发现 ...
- Python变量类型(l整型,长整形,浮点型,复数,列表,元组,字典)学习
#coding=utf-8 __author__ = 'Administrator' #Python变量类型 #Python数字,python支持四种不同的数据类型 int整型 long长整型 flo ...
- Python编程Day6——元组类型、字典类型、集合
一.元组类型(tuple) 1.用途:记录多个值,当多个值没有改变的需求此时元组更为合适 2.定义:在()内用逗号分隔开多个任意类型的值(参数为for可以循环的对象) 3.常用操作: 索引(正取向+反 ...
- Python全栈之路----数据类型—元组类型
元组类型:有序,不可变的,又叫只读列表 names = ("alex","jack","eric") 1.元组本身不可变,但如果元组中有可 ...
- python——元组和字典类型简明理解
元组类型: 元祖创建: 不需要括号可以但是一个元素就当成了字符串类型了 >>> tup1="a"; >>> type(tup1) <cla ...
- Python 变量类型
Python 变量类型 变量存储在内存中的值.这就意味着在创建变量时会在内存中开辟一个空间. 基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中. 因此,变量可以指定不同的数据 ...
- python字符类型的一些方法
python 字符串和字节互转换.bytes(s, encoding = "utf8") str(b, encoding = "utf-8") i.isspac ...
- python 元组操作
关于元组的常用操作,请参考:http://www.runoob.com/python/python-tuples.html 元组的元素不可修改 ,元组的元素的元素可修改 count(self,valu ...
随机推荐
- HTML常用的特殊符号&前端使用的标点符号
不想在项目中使用图片, 还得切,如关闭按钮“×”.男女符号“♂♀”.对勾“√”等,找到了一篇全面的博客,转自https://www.haorooms.com/post/html_tsfh,感谢. 如下 ...
- Python 协程 61
什么是协程 协程,又称微线程,纤程.英文名Coroutine.一句话说明什么是线程:协程是一种用户态的轻量级线程. 协程的特点 协程拥有自己的寄存器上下文和栈.协程调度切换时,将寄存器上下文和栈保存到 ...
- Cookie的使用(14)
一:cookie的简要介绍: (1)什么是cookie a.cookie是一种客户端的状态管理技术b.当浏览器向服务器发送请求的时候,服务器会将少量的数据以set-cookie消息头的方式发送给浏览器 ...
- maven项目打包成war包发布到tomcat下...
分为两种情况: 1.当你的项目中没有前端页面时,直接右键项目--Export--选择web下的warFile--选择目录到tomcat安装目录下的webapps下即可访问. 2.当项目中有前端页面时 ...
- 2.Spring 拦截器应用
首先咱们来了解一下具体的业务场景(这个跟第一篇中的很相似但有不同):具体的业务是这样的,现在系统中有六十多个主档(功能模块),每个主档都有新增.修改.删除功能,当我们在对每个主档做这些操作时需要对其记 ...
- Exp2 后门原理与实践-------20164325王晓蕊
Exp2 后门原理与实践 任务一:使用netcat获取主机操作Shell,cron启动 1.windows获取linux shell 1.1 ipconfig 查看本机查看以太网适配器(8)的ipv ...
- python基础自学 第二天
注释 分类 单行注释 多行注释 作用 使用自己熟悉的语言,在程序中对某些代码进行标注说明,增强程序可读性 单行注释(行注释) 以 # 开头,#右边所有的东西就被当成说明文字,而不是要执行的程序,只是说 ...
- javascript中的replace方法
1.replace 调用方法str.replace(regexp|substr, newSubStr|function) regexp,正则表达式 substr,需要被替换的字符串 newSubStr ...
- pycharm断点应用
1.在需要打断点行处,单击鼠标左键打断点 2.调试程序开始,在第一个断点之前停止 3.跳过第一个断点进入到下一个断点
- day_11函数的形参与实参
昨天讲了函数的定义和简单分类 1:什么是函数:具体特定功能的代码快 --特定功能代码作为一个整体,并给该整体命名,就是函数. 函数的优点: 1:减少代码的冗余 2:结构清晰,可读性强 3:具有复用性, ...