前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python 基础(元组)

Python 基础(元组)

作者头像
数据STUDIO
发布2021-06-24 10:21:24
4430
发布2021-06-24 10:21:24
举报
文章被收录于专栏:数据STUDIO

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

Python基本数据类型--元组

  • 元组是不可变数据类型
  • 元组中的数据类型不限
  • 元组中的元素可以说是python 内一切数据类型,元素之间用逗号分割
  • 最外层用( )括起来
  • 由于元组和列表极其相似,元组又常常被称之为只读列表

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

元组的定义

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

将字符串转化为元组

代码语言:javascript
复制
>>> st = '数据STUDIO'
>>> tup = tuple(s)
>>> tup
('数', '据', 'S', 'T', 'U', 'D', 'I', 'O')
>>> type(tup)
tuple

将列表转化为元组

代码语言:javascript
复制
>>> L = ['关注', '点赞', '转发', '在看', '收藏', '数据STUDIO']
>>> tup = tuple(L)
>>> tup
('关注', '点赞', '转发', '在看', '收藏', '数据STUDIO')
>>> type(tup)
tuple

使用( )来定义

代码语言:javascript
复制
>>> tup = ('关注', ['点赞', '转发', '在看'], '收藏', '数据STUDIO')
>>> tup
('关注', ['点赞', '转发', '在看'], '收藏', '数据STUDIO')
>>> type(tup)
tuple

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

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

代码语言:javascript
复制
>>> tup = (520)
>>> t
520
>>> type(t)
int

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

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

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

代码语言:javascript
复制
>>> tup = (520,)
>>> t
(520,)
>>> type(t)
tuple

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

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

元组的一些运算

+号运算

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

代码语言:javascript
复制
>>> a = (1, 2, 3)
>>> b = (4, 5, 6)
>>> a+b
(1, 2, 3, 4, 5, 6)

*号运算

重复元祖当中的元素

代码语言:javascript
复制
>>> ('点赞', '关注')*3
('点赞', '关注', '点赞', '关注', '点赞', '关注')

in包含运算

判断元素是否在元祖当中

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

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

元组的索引和切片

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

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

元组对象的常用方法

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

计数tuple.count()

代码语言:javascript
复制
>>> tup1 = ('关注', '转发','点赞', '点赞', '在看', '收藏', '点赞', '数据STUDIO')
>>> tup1
>>> tup1.count('点赞')
3

索引tuple.index()

代码语言:javascript
复制
>>> 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

元组不可变的真正含义

代码语言:javascript
复制
>>> 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改变了....

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

代码语言:javascript
复制
>>> 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本身是可变的!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-12-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据STUDIO 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 元组的定义
    • 使用tuple()将其他可迭代对象转化成元组
      • 使用( )来定义
        • 只包含一个元素的元组的定义
        • 元组的一些运算
          • +号运算
            • *号运算
              • in包含运算
              • 元组的索引和切片
              • 元组对象的常用方法
                • 计数tuple.count()
                  • 索引tuple.index()
                  • 元组不可变的真正含义
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档