ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Python元组说好改不了_里面放个列表照样改

Python元组说好改不了_里面放个列表照样改 之前讲列表那一篇的时候, 我们提及列表能够进行增加、删除、修改以及查询操作, 其灵活性如同一块白板, 随时都可以擦掉然后随时书写, 是这样的情况。可是, 这里面还存在着一种数据容器, 它的样子跟列表几乎完全一样, 然而却偏偏就是不让你去进行修改, 它究竟是什么, 它就是——元组tuple。愈发诡异的是, 元组明确表示好是不能更改的, 然而, 要是你往其中塞入一个列表, 那个列表的内部内容依旧能够被更改, 这究竟是怎样一回事呢?一、元组是什么一句话就懂有一种数据容器, 它和列表类似, 被称作元组, 而其有个区别在于, 元组里的元素是不可以被修改的。倘若列表属于那种活页夹具备能够增加页面、抽取页面以及修改其中内容的特性, 那么元组便是塑封文件, 塑封完成之后就固定成型了, 仅仅只能观看, 无法进行改动。简单说列表能增删改查元组只能查。二、元组的定义语法元组的定义的情况跟列表近乎相同, 唯一存在的区别在于, 列表使用方括号, 而元组使用圆括号、也就是 ()。# 数字元组 t1 (11, 22, 33, 67, 10) # 字符串元组 t2 (北京, 上海, 广州) # 混装元组什么类型都能装 t3 (100, True, 你好, None) # 嵌套元组元组套元组 t4 (100, True, 你好, None, (50, 60, 70))跟列表情形一样, 元组对数据类型没要求, 数值、字符串、布尔值、None无需分类随意搭配装填, 乃至进行嵌套都可以。用 type() 看一眼类型是 tupleprint(type(t1)) # print(t1) # (11, 22, 33, 67, 10)三、元组的查询跟列表一模一样元组尽管没办法进行修改, 然而查询绝对是毫无问题的。其方式跟列表是一样的, 采用方括号再加上下标:t1 (11, 22, 33, 67, 10) print(t1[3]) # 67正索引从左往右0开头 print(t1[-1]) # 10负索引从右往左-1开头正则索引是从0起始的, 负则索引是从-1起始的, 其规则跟列表是全然一致的。嵌套着的元组同样如此, 是分层来取值。t4 (100, True, 你好, None, (50, 60, 70)) print(t4[4][1]) # 60先取下标4的元组再取其中下标1的元素四、说好不能改真的不能改吗先来试试直接改元组的元素t1 (11, 22, 33, 67, 10) t1[0] 100 # 报错马上飘黄警告元组不支持项目赋值。强制运行直接报 。这很好理解——元组就是不让改嘛。不过要是元组之中放置了可变类型像是列表, 那么可变类型里的内容依旧能够被修改。来看这个例子t2 (11, 22, 33, 44, 55, [100, 200, 300, (你好, 上海, 广州)]) # 这样写报错——你改的是元组中下标5的元素 t2[5] 400 # 这样写没问题——你改的是列表中下标2的元素 t2[5][2] 400 print(t2) # 结果: (11, 22, 33, 44, 55, [100, 200, 400, (你好, 上海, 广州)]) # 这样写又报错了——你改的是最里层元组中的元素 t2[5][3][0] Hello看出规律了吗不论你嵌套的深度如何, 只要最终所修改的是列表里的元素, 那就没问题只要最终所修改的是元组里的元素, 那就不行。举个例子来说, 元组就如同一个上了锁的玻璃展柜, 展柜当中放置的物品你是不能够去进行更换的。然而要是展柜里放置了一本具备可擦写性质的笔记本列表, 你隔着玻璃把笔记本翻开并写上几笔, 那是全然可行的——这是由于你并没有去改变展柜里所放置的物品, 仅仅是在使用那个物品而已。五、空元组的两种写法跟列表一样空元组也有两种定义方式# 方式1直接写一对空圆括号 t1 () # 方式2调用 tuple() 函数 t2 tuple() print(type(t1), t1) # () print(type(t2), t2) # ()六、单元素元组的坑不加逗号就白写了这算是元素为单一者的元组极易踏入的陷阱, 要是元组所含元素仅为单一个体, 那么该元素的末端必定得增添一个逗号。# 你以为定义了元组其实Python认为这是个字符串 t1 (你好) print(type(t1)) # # 加个逗号才是元组 t1 (你好,) print(type(t1)) #为啥呢? 因处于其中, 圆括号除去用以定义元组之外, 还用它们来进行数学分组。恰似数学里, 1 2* 3的括号仅仅是分组, 并非元组。因此, 于眼中而言, “你好”, 系“你好”之外裹着一层冗赘括号, 与“你好”并无二致。且会对你作出提示: “请将冗余括号予以移除”。但只要你加了逗号就知道哦你是要定义元组。而且不管元素是什么类型都得加逗号# 数字也得加 t2 (100,) print(type(t2)) #铁定的规则, 对于单元素的元组而言, 元素的后面一定要加上逗号。要是不加逗号的话, 那圆括号就成了数学上的括号, 而可不是元组了。七、元组只有两个方法因为元组没办法进行增加、删除以及修改的操作, 所以列表所拥有的诸如 、、、sort 这样的方法, 元组完全都不存在。元组只有两个方法而且都是只读的t1 (11, 22, 67, 67, 10) # index找67第一次出现的位置 result t1.index(67) print(result) # 2 # count数67出现了几次 result t1.count(67) print(result) # 2此两种方法, 与列表的index以及count的用法, 全然相同。若index查找不着, 便会报错。若count查找不着, 则返回0。八、元组的常用内置函数那些不带点的内置函数, 对于元组同样是适用的, 其用法跟列表完全是一模一样的:特别注意() 返回的是列表不是元组这是, 元组使用 () 的时候, 最容易被踩到的坑。你, 给它的是元组, 它还给你的, 却是一个列表:t1 (33, 11, 67, 22, 10) result sorted(t1) print(type(result)) # ← 注意是列表 print(result) # [10, 11, 22, 33, 67]为何会这样呢? 原因在于, 身为通用函数, 它适用于全部的数据容器。为了确保返回结果具备统一性, 无论你给予它何种容器, 它都会统一返回列表。如果你想要排序后的元组怎么办两步走# 第一步sorted排序得到列表 # 第二步tuple()把列表转成元组 result tuple(sorted(t1)) print(type(result)) # print(result) # (10, 11, 22, 33, 67)降序排列也一样加 Trueresult tuple(sorted(t1, reverseTrue)) print(result) # (67, 33, 22, 11, 10)九、实际开发中元组比你想象的常见你觉得元组非得要自己手动去定义才能够用得上吗? 实际上呀, 你在进行写函数这个行为的时候就已经使用过元组了, 那个可变参数 *args 它就是一个元组。def demo(*args): print(type(args)) # return sum(args) result demo(100, 200, 300) print(result) # 600还记不记得, 讲函数可变参数的时候所说的, *args会将传进来的各种各样的参数, 打包成为一个元组。现在你已经知晓了元组的查询, 以及元组的遍历, 再来瞧*args, 就彻底洞悉了。十、元组的循环遍历元组的遍历方式和列表完全一样四种写法都适用第1种while循环遍历t1 (11, 22, 33, 44, 55) index 0 while index len(t1): print(t1[index]) index 1第2种for直接遍历最常用for item in t1: print(item)第3种for range lenfor i in range(len(t1)): print(t1[i])第4种for 编号和元素一起拿for index, item in enumerate(t1): print(index, item)上一篇涉及列表遍历的文章之中, 针对四种写法的区别以及优劣, 已然进行过详尽的对比, 此处便不再予以重复了。十一、总结元组 vs 列表对比项列表元组定义符号方括号圆括号 ()能否增删改可以不行能否查询可以可以下标规则正0开头负-1开头完全一样方法数量11个///sort...2个index/count内置函数max/min/len//sum完全一样返回类型列表列表不是元组单元素定义即可(100,) 必须加逗号嵌套可变类型本身就是可变的里面的列表内容仍可改三句话记住元组1. 元组就是只读版列表能查不能改。2. 单元素元组必须加逗号不加就白写了。3. 元组里的列表还能改因为改的是列表不是元组。
返回列表