元组操作的函数

核心提示我们对列表list序列已经有了一定的了解,今天我们了解下另外一个序列元组tuple的知识。元组tuple是一个比较常用的不可变序列;都说元组tuple和列表list很类似,不同之处在于元组一旦创建就不可改变。这是真的吗?元组中的元素真的不能

我们已经知道了一些关于链表序列的知识。今天,我们知道了下一个序列元组tuple。

元组是常用的不可变序列;据说tuple类似于list list,只不过tuple一旦创建就无法更改。

是真的吗?/你不说。元组中的元素真的不能修改吗?而元组和列表的区别是什么?让我们去了解一下:

首先是元组的定义。它是用括号创建的,元素项用逗号分隔。示例代码:

根据运行结果,不难看出元组中的元素项也可以是不同类型的对象,与list list相同;上面的列表list用括号[]定义;两者的元素都用逗号分隔。

如何定义一个元组中何时只有一个元素?示例代码:

从上面的结果我们得出结论:当tuple中只有一个元素时,必须在元素后加一个逗号;否则Python解释器会把括号作为运算符计算,结果是5的整数;为了消除这种歧义,Python要求在定义只有一个元素的元组时,必须在元素后加一个逗号;这与列表不同。

元组索引和切片

元组的索引和切片方法与链表基本相同;

都遵循[头下标:尾下标]“左闭右开”的原则,也称“左无右”原则。示例代码:

让我们修改其中一个元素:

呃?!为什么报错了?提示元组对象不支持元素赋值。

哦,这就是我们常说的“tuple tuple一旦定义就不能更改”。

元组嵌套,实例代码:

我们试着把tuple里的‘Java’改成‘Go’。示例代码:

呃?不是说元组一旦定义了就不能改了吗?怎样才能再次改变它们?这就让人迷茫了!细心的朋友会发现,改变的元素是列表类型,因为列表是变量类型;

你说得对,是这样的。如果元组中的元素是不可变类型对象,如常量、字符串等。,修改这些不可变元组的元素时会报错;如果元组中的元素是可变对象,比如list list,那么它可以被修改,并且不会报告错误。

表面上看,tuple的元素确实发生了变化,但实际上并不是tuple的元素,而是list的元素。

#让我们再举一个例子,继续分析:

前两个del报告错误,表示一旦创建了元组,就不能删除该元素;其实字符串也有这个属性。一旦创建,里面的单个字符串就不能删除。

Del三次后删除了可变元素列表中的子元素。在可变元素列表中的所有子元素都被删除后,如果继续删除它们,将会报告TypeError错误。

上面的例子用id来“监控”元组最后一个元素的内存地址变化,发现无论怎么删除,它的内存地址都保持不变。

如果我们给最后一个变量元素赋值会怎么样?示例代码:

报告上述IndexError下标越界异常是因为此时tuple_org[-1]已经是空 list [],并且其中没有元素。[0]表示第1个元素的位置,因此报告错误;

在上面例子的整个过程中,无论最后一个元素如何赋值,都会报错。

Tuple_org[-1],你去泰国了吗?变性人?

言归正传,结合上面的例子和id函数的输出结果,我们来分析一下:

元组是不可变的序列。所谓元组“不可变”,就是元组中每个元素的内存点永远不变。的所有不可变序列在第一次定义后都不能修改。它包含对其他对象的引用,这些对象可能是可更改或可修改的。

虽然元组中的元素值不允许修改,但是我们可以用=拼接元组。示例代码:

在+= append操作之后,A元组的内存地址发生了变化,因为它重新分配了新元素的内存地址。

Python内置函数:

找出序列中元素的个数,并对序列进行排序。示例代码:

注意:排序内置函数对元组排序时,返回的是一个排序后的列表对象,而不是一个新的元组对象,元组本身没有变化;

将元组转换为列表,示例代码:

虽然不允许删除元组中的元素值,但是我们可以使用del语句删除整个元组。示例代码:

对了,元组没有自己的方法,而列表有自己的操作方法。

最后,我们总结一下:

元组本身所指向的内存实际上保存了元组中数据的内存地址集。一旦建立了元组,就不能修改或删除这个存储器地址集。一旦集合中的地址改变,必须重新分配元组空来保存新的存储器地址集合。

顺便说一句:

还有一个升级版的tuples: namedtuple,是集合模块中的函数对象。

命名元组会在后续的面向对象程序中介绍给你,因为需要和类对象结合使用才能更清晰。感兴趣的朋友可以先自己了解一下。

看了上面的例子和分析,你对tuple这种不可变的序列有更深的理解吗?

好吧!Python数据类型中的tuple tuple元组在此分享。如有疑问,请在评论区留言,我会及时回复。谢谢!

 
友情链接
鄂ICP备19019357号-22