Python 基础(元组)

Python 的元组与列表类似,不同之处在于元组的元素不能修改。

Python基本数据类型--元组
  • 元组是不可变数据类型

  • 元组中的数据类型不限

  • 元组中的元素可以说是python 内一切数据类型,元素之间用逗号分割

  • 最外层用( )括起来

  • 由于元组和列表极其相似,元组又常常被称之为只读列表

面试时,经常被问,列表与元组之间等区别是什么?相信学完Python 基础(列表)的读者,很快能想到列表是可变数据类型,而本期学的元组是不可变数据类型。具体来看看是怎么回事吧!

元组的定义

使用tuple()将其他可迭代对象转化成元组

将字符串转化为元组

>>> st = '数据STUDIO'
>>> tup = tuple(s)
>>> tup
('数', '据', 'S', 'T', 'U', 'D', 'I', 'O')
>>> type(tup)
tuple

将列表转化为元组

>>> L = ['关注', '点赞', '转发', '在看', '收藏', '数据STUDIO']
>>> tup = tuple(L)
>>> tup
('关注', '点赞', '转发', '在看', '收藏', '数据STUDIO')
>>> type(tup)
tuple

使用( )来定义

>>> tup = ('关注', ['点赞', '转发', '在看'], '收藏', '数据STUDIO')
>>> tup
('关注', ['点赞', '转发', '在看'], '收藏', '数据STUDIO')
>>> type(tup)
tuple

只包含一个元素的元组的定义

按照常规思维定义,括号内是什么类型,结果仍是什么类型,括号相当于摆设。

>>> tup = (520)
>>> t
520
>>> type(t)
int

>>> tup = ('DATA STUDIO')
>>> tup
'DATA STUDIO'
>>> type(t)
str

>>> tup = (['点赞', '转发', '在看'])
>>> tup
['点赞', '转发', '在看']
>>> type(t)
list

只含有一个元素的元组的定义,后面必须加一个逗号

>>> tup = (520,)
>>> t
(520,)
>>> type(t)
tuple

>>> tup = ('DATA STUDIO',)
>>> tup
('DATA STUDIO',)
>>> type(t)
tuple

>>> tup = (['点赞', '转发', '在看'],)
>>> tup
(['点赞', '转发', '在看'],)
>>> type(t)
tuple

元组的一些运算

+号运算

把元祖的元素全部添加到一个新的元祖当中,原元组不变

>>> a = (1, 2, 3)
>>> b = (4, 5, 6)
>>> a+b
(1, 2, 3, 4, 5, 6)

*号运算

重复元祖当中的元素

>>> ('点赞', '关注')*3
('点赞', '关注', '点赞', '关注', '点赞', '关注')

in包含运算

判断元素是否在元祖当中

>>> tup = ('关注', '转发', '在看', '收藏', '数据STUDIO')
>>> '点赞' in tup
False
# 如果文章对您有帮助,记得文末点赞支持哟

>>> tup = (['关注', '点赞'], '转发', '在看', '收藏', '数据STUDIO')
>>> ['关注', '点赞'] in tup
True

元组的索引和切片

这里和列表是一模一样的,没有任何区别

>>> tup = ('life', 'is',  'short', 'I', 'use', 'python')
>>> tup
('life', 'is', 'short', 'I', 'use', 'python')
#取出索引为0的元素
>>> tup[0]
'life'
#取出倒数第一个元素
>>> tup[-1]
'python'

元组对象的常用方法

之前说了元组是不可变数据类型,那么他就没有增 删 改的方法,相比列表就少了很多。如果需要修改,可先转化为列表,通过列表进行修改,再转变成元组。

计数tuple.count()

>>> tup1 = ('关注', '转发','点赞', '点赞', '在看', '收藏', '点赞', '数据STUDIO')
>>> tup1
>>> tup1.count('点赞')
3

索引tuple.index()

>>> tup1 = ('关注', '转发','点赞', '点赞', '在看', '收藏', '点赞', '数据STUDIO')
>>> tup1
>>> tup1.index('点赞')
2

>>> tup1 = ('关注', '转发','点赞', '点赞', '在看', '收藏', '点赞', '数据STUDIO')
>>> tup1.index('点赞',4,6) # 找不到就报错
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-26-89be7a0f36f3> in <module>
      1 tup1 = ('关注', '转发','点赞', '点赞', '在看', '收藏', '点赞', '数据STUDIO')
----> 2 tup1.index('点赞',4,6)

ValueError: tuple.index(x): x not in tuple

元组不可变的真正含义

>>> tuple1 = (5, 2, '点赞', ['人生', '苦短', '我关注数据STUDIO'])
>>> tuple1
(5, 2, '点赞', ['人生', '苦短', '我关注数据STUDIO'])

>>> tuple1[1] = 1     # 元组是不可变数据类型
---------------------------------------------------------------
TypeError                     Traceback (most recent call last)
<ipython-input-28-847323afb01c> in <module>
----> 1 tuple1[1] = 1

TypeError: 'tuple' object does not support item assignment
  
  
>>> tuple1[3][0]='life'    
>>> tuple1
 (5, 2, '点赞', ['life', '苦短', '我关注数据STUDIO'])

#为什么这里没有报错, 且元组tuple1改变了....

元组的不可变是指,元组本身自己的元素不可变,同理列表可变是指列表自己本身的元素可变。

>>> tuple2 = ('点赞', '关注', ['公众号', '数据STUDIO'])
>>> tuple2
('点赞', '关注', ['公众号', '数据STUDIO'])

>>> tuple2[2][0] = '转发'
>>> tuple2[2][1] = '在看'
>>> tuple2
('点赞', '关注', ['转发', '在看'])

>>> tuple2[2].append('jim_learning')
>>> tuple2
('点赞', '关注', ['转发', '在看', 'jim_learning'])

tuple2内存示意图

当把list的元素'公众号'和 '数据STUDIO'修改为'转发', '在看'后, tuple2变为:


表面上看,tuple2的元素好像变了,但其实变得不是tuple的元素而是list的元素。tuple2开始指向的list并没有改成别的list,所以tuple2所谓的"不变" 是指, tuple的每个元素,指向永远不变。即指向'点赞',就不能改成指向'关注',指向一个list,就不能改成指向其他对象,但指向的这个list本身是可变的!


推荐阅读

Python 基础(字符串)

Python 基础(列表)

-- 数据STUDIO -- 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值