导语
  在介绍元组之前那,先来回顾一个变量赋值问题。对于字符串来说一旦被创建如果需要进行修改的时候就如同下图中展示的一样,需要新开辟空间对新的值进行存储。对于其他语言也是同样适用。
  元组作为Python中的又一个数据类型,接下来就来看看元组这种数据类型。


文章目录

  • 回顾
  • 元组
  • 可迭代对象之间的转换
  • 字符串转换为元组
  • 列表转换为元组
  • 元组转换为字符串
  • 元组转换为列表
  • 元组操作
  • def count(self, *args, **kwargs)
  • def index(self, *args, **kwargs)
  • 总结


回顾

变量赋值问题

如果在实际操作中,出现如下的操作

v = 1
v = 2
print(v)

那么在内存中的操作又是什么样子呢?如图所示,在最终输出的结果是2

python 元祖空 python元祖赋值_Python基础


那么在实际的操作过程中如果出现如下的操作又会是什么样子呢

v = "test"
v1 = v.replace("t","o");
print(v)
print(v1)

v = "test"
v = v.replace("t","o");
print(v)

python 元祖空 python元祖赋值_python 元祖空_02

对于列表来说可以通过索引进行取值,当然任意的可迭代对象,都可以通过索引进行取值。那么字符串呢?在如下的代码中测试了这个场景

li = [11,22,33,454]
li[3] = 999;
print(li)


test = "nihui"
v = test[0]
print(v)
test[1] = "tes"
print(test)

会发现,并不是所有的可迭代对象都可以通过这样的方式进行赋值操作。同样也可以说字符串是不支持修改操作的。

元组

  在开始分享元组之前先来看一个小演示。在我们操作列表的时候会发现列表是有序的,也就是说使用print进行列表输出的时候每次执行结果都是一样的如下,如果中间出现一次不一样的时候就说明Python的列表是无序的。

li = [11,22,33,454]
print(li)
print(li)
print(li)
print(li)
print(li)
print(li)
print(li)
print(li)
print(li)
print(li)

python 元祖空 python元祖赋值_元组_03

列表是有序的,并且列表的元素是可以被修改的

  元组其实是与列表是类似的,其实是对于列表功能的封装。如下,从表现啊形式上来看,一个是用中括号一个是用括号。但是实际上还是有很多的不一样的地方。

# 列表
li = [11,22,33,44]
#元组
tu = (11,22,33,44)

  在Python中元组使用tuple进行表示,元组对于列表的封装基于两点,第一元组的元素是不可被修改,第二元组的元素是不能增加也不能删除。

定义一个元组
在定义元组的时候为了与方法进行区分,在最后元素结束的时候加入一个逗号,表示这个是一个元组

tu = (111,"test",(111,222),[(33,44)],True,33,44,)

元组取值

tu = (111,"test",(111,222),[(33,44)],True,33,44,)
#通过索引取值
v = tu[0]
#通过切片取值
v1 =tu[0:1]
print(v1)
print(v)

元组不能进行修改

元组可以被for循环

tu = (111,"test",(111,222),[(33,44)],True,33,44,)

for item in tu:
    print(item)

可迭代对象之间的转换

字符串转换为元组
tu = (111,"test",(111,222),[(33,44)],True,33,44,)
s = "test"
li = ["test",123,"nihui"]

v = tuple(s)
print(v)
列表转换为元组
tu = (111,"test",(111,222),[(33,44)],True,33,44,)
s = "test"
li = ["test",123,"nihui"]

v = tuple(li)
print(v)
元组转换为字符串
tu = (111,"test",(111,222),[(33,44)],True,33,44,)
s = "test"
li = ["test",123,"nihui"]

v = str(tu)
print(v)
元组转换为列表
tu = (111,"test",(111,222),[(33,44)],True,33,44,)
s = "test"
li = ["test",123,"nihui"]

v  = list(tu)
print(v)

  以上的操作可以证明,元组与列表和字符串一样都可以看做是一个可迭代对象。同样也可以看出来元组其实是有序的。

元组操作

  上面的内容中已经提到元组的一级元素是不能被修改的。所以对于元组的操作就比较少了!

def count(self, *args, **kwargs)

获取元组中指定元素的个数

tu = (111,"test",(111,222),[(33,44)],True,33,44,)

v = tu.count(True);
print(v)
def index(self, *args, **kwargs)

获取元组中指定元素的索引位置

tu = (111,"test",(111,222),[(33,44)],True,33,44,)

v = tu.index(True)
print(v)

总结

  如果在某些场景下,只是想使用某些值,但是不需要修改的时候,就可以使用元组。如果实在需要操作的时候,可以把一个元组先转换成一个列表,操作完成之后再做二次转换。

tu = (111,"test",(111,222),[(33,44)],True,33,44,)
li = list(tu)
li.append(55)
print(li)
tu = tuple(li)
print(tu)