python学习——【第五弹】
创始人
2024-06-02 19:21:56
0

前言

上一篇文章 python学习——【第四弹】中我们学习了不可序列 字符串可变序列 列表;这篇文章我们接着学习python中不可变序列 元组

元组

元组python内置的数据结构之一, 有序,可多种不同数据类型的元素混合存储,允许有重复数据,是不可变序列(所以没有元组生成式)。

创建

1 直接小括号 yuanzu=(‘hello’,‘world’,10)
2 使用内置函数tuple() yuanzu=tuple((‘python’,‘hello’,0))
3 注意:只包含一个元组的元素需要使用逗号和小括号 yuanzu=(‘helloworld’,)
不加逗号会认为是 str类型。

yuanzu=('hello','world',90)
print(yuanzu,type(yuanzu))  #('hello', 'world', 90) # 省略小括号创建元组
yuanzu1='hello','world',90
print(yuanzu1,type(yuanzu1))  #('hello', 'world', 90) 
yuanzu3=('helloworld',)
print(yuanzu3,type(yuanzu3))  #('helloworld',) # 使用函数tuple()
yuanzu2=tuple(('hello','world',80))
print(yuanzu2,type(yuanzu2)) # ('hello', 'world', 80) 

使用zip()函数

# 生成元组
list1=[1, 2, 3, 4]
list2=['a', 'b', 'c', 'd']
new_list=zip(list1, list2)  # 转换成一个zip对象
print(new_list, type(new_list))  #  
dic=tuple(new_list)  # 将zip对象转换为元组,嵌套中的元组是对应位置元素的两两结合
print(dic, type(dic))  # ((1, 'a'), (2, 'b'), (3, 'c'), (4, 'd')) 

空元组的创建

# 空元组的创建方式
yuanzu4=()
yuanzu5=tuple()
print('空元组是',yuanzu4,yuanzu5)  #空元组是 () ()

查询

元组有序序列,可以通过索引号来访问元组中的元素

yuanzu= ('hello','python','hello','world')
print(yuanzu[1])     # python

in/not in 判断元素是否存在

yuanzu= ('hello','python',80,'world')
print(80 in yuanzu)  # True
print('hello' in yuanzu) # True
print(100 in yuanzu)     # False

获取元组长度

len()方法

yuanzu= ('hello','python',80,'world')
print(len(yuanzu))   # 4

合并元组

使用操作符 +

yuanzu1 = (10,30,'hello')
yuanzu2 = (99,'python')
yuanzu3 = yuanzu1 + yuanzu2
print(yaunzu3)   # (10, 30, 'hello', 99, 'python')

删除元组

元组中的某个特定的元素无法删除,可以使用del关键字将整个元组对象删除

t = ('hello','python',80,'world')
del t
print(t)    # NameError: name 't' is not defined. Did you mean: 't1'?  已经删除元组

遍历

元组属于可迭代对象,依然可以使用 for —in 循环

yuanzu = tuple(('haha', 'lili', 'mimi'))
for item in yuanzu:print(item)
'''
haha
lili
mimi
'''

对象

注意事项:
元组中存储的是对象的引用 ; 如果元组中对象本身是不可变对象,则不能再引用其他对象 ;如果元组中对象本身是可变对象,则可变对象的引用(id地址)不允许改变,但数据可以改变

如何理解呢?

我们知道不可变对象只允许查看,如果对其进行修改等操作会改变不可变对象的引用(id地址),假如元组中的不可变对象的引用改变了,那么元组的id地址也会发生变化; 而可变对象在进行修改操作后的引用是不发生改变的,因此元组中对象如果是可变对象的话,对其进行修改不会改变元组的id地址。

我们可以举几个例子看一下

# 举例
yuanzu=(10,'hello world',[11,22,'lisa'])
print('原元组的信息:',yuanzu,type(yuanzu),id(yuanzu))
print(yuanzu[0],type(yuanzu[0]),id(yuanzu[0]))
print(yuanzu[1],type(yuanzu[1]),id(yuanzu[1]))
print(yuanzu[2],type(yuanzu[2]),id(yuanzu[2]))
# 尝试修改yuanzu中的不可变元素
print('修改元组的不可变元素:')
yuanzu[0]=100
print(yuanzu)  #不可修改  TypeError: 'tuple' object does not support item assignment# 修改元组指向的列表为其他元素
print('修改元组中的列表为其他元素:')
yuanzu[2]='lisa'
print(yuanzu) #不可修改   TypeError: 'tuple' object does not support item assignment# 通过修改元组中的列表元素来更改列表中的元素;由于列表是可变对象,对列表实现增删改不会产生
#列表对象:修改前后的内存地址不变,则元组的内存地址也不会发生改变
print('修改列表中的元素前列表信息:',yuanzu[2],id(yuanzu[2]))
yuanzu[2].append('tom')
print('修改元组中列表中的元素后,列表信息为:',yuanzu[2],id(yuanzu[2]))
print('修改元组中列表对象中的元素后的元组信息:',yuanzu,type(yuanzu),id(yuanzu))

在这里插入图片描述

但是当我们尝试去修改元组中的不可变序列(字符串)或者是直接修改引用列表元素的地址时,发现程序抛出 TypeError: ‘tuple’ object does not support item assignment 的错误

当然也可以将元组转换成列表,然后修改列表,再将修改的列表转换成元组,但要注意这样会产生一个新的元组。

t = ('hello','python',80,'world')
print('转换前的元组:',t,type(t),id(t))
lst = list(t)       # 将元组转换为列表
print('转换成列表:',lst,type(lst))
lst[1] = 999
t1 = tuple(lst)
print('从列表转换成的元组:',t1,type(t1),id(t1))

在这里插入图片描述

从元组的这一特点我们也可以看出:

在程序中要尽量使用不可变序列;因为一旦创建了不可变对象,对象内部的所有数据就都不能被修改,这样可以避免由于修改数据而导致的错误;所以对于不可变对象,在多任务环境下,同时操作对象的时候就不需要加锁。

每篇一语

有志者事竟成!
如有不足感谢指正

相关内容

热门资讯

常用商务英语口语   商务英语是以适应职场生活的语言要求为目的,内容涉及到商务活动的方方面面。下面是小编收集的常用商务...
六年级上册英语第一单元练习题   一、根据要求写单词。  1.dry(反义词)__________________  2.writ...
复活节英文怎么说 复活节英文怎么说?复活节的英语翻译是什么?复活节:Easter;"Easter,anniversar...
2008年北京奥运会主题曲 2008年北京奥运会(第29届夏季奥林匹克运动会),2008年8月8日到2008年8月24日在中华人...
英语道歉信 英语道歉信15篇  在日常生活中,道歉信的使用频率越来越高,通过道歉信,我们可以更好地解释事情发生的...
六年级英语专题训练(连词成句... 六年级英语专题训练(连词成句30题)  1. have,playhouse,many,I,toy,i...
上班迟到情况说明英语   每个人都或多或少的迟到过那么几次,因为各种原因,可能生病,可能因为交通堵车,可能是因为天气冷,有...
小学英语教学论文 小学英语教学论文范文  引导语:英语教育一直都是每个家长所器重的,那么有关小学英语教学论文要怎么写呢...
英语口语学习必看的方法技巧 英语口语学习必看的方法技巧如何才能说流利的英语? 说外语时,我们主要应做到四件事:理解、回答、提问、...
四级英语作文选:Birth ... 四级英语作文范文选:Birth controlSince the Chinese Governmen...
金融专业英语面试自我介绍 金融专业英语面试自我介绍3篇  金融专业的学生面试时,面试官要求用英语做自我介绍该怎么说。下面是小编...
我的李老师走了四年级英语日记... 我的李老师走了四年级英语日记带翻译  我上了五个学期的小学却换了六任老师,李老师是带我们班最长的语文...
小学三年级英语日记带翻译捡玉... 小学三年级英语日记带翻译捡玉米  今天,我和妈妈去外婆家,外婆家有刚剥的`玉米棒上带有玉米籽,好大的...
七年级英语优秀教学设计 七年级英语优秀教学设计  作为一位兢兢业业的人民教师,常常要写一份优秀的教学设计,教学设计是把教学原...
我的英语老师作文 我的英语老师作文(通用21篇)  在日常生活或是工作学习中,大家都有写作文的经历,对作文很是熟悉吧,...
英语老师教学经验总结 英语老师教学经验总结(通用19篇)  总结是指社会团体、企业单位和个人对某一阶段的学习、工作或其完成...
初一英语暑假作业答案 初一英语暑假作业答案  英语练习一(基础训练)第一题1.D2.H3.E4.F5.I6.A7.J8.C...
大学生的英语演讲稿 大学生的英语演讲稿范文(精选10篇)  使用正确的写作思路书写演讲稿会更加事半功倍。在现实社会中,越...
VOA美国之音英语学习网址 VOA美国之音英语学习推荐网址 美国之音网站已经成为语言学习最重要的资源站点,在互联网上还有若干网站...
商务英语期末试卷 Part I Term Translation (20%)Section A: Translate ...