zzzzy09

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

元组是 Python 中另一个重要的序列结构,和列表类似,也是由一系列按特定顺序排序的元素组成。和列表不同的是,列表可以任意操作元素,是可变序列;而元组是不可变序列,即元组中的元素不可以单独修改。

元组可以看做是不可变的列表。通常情况下,元组用于保存不可修改的内容。

 从形式上看,元组的所有元素都放在一对小括号“()”中,相邻元素之间用逗号“,”分隔,如下所示:

(element1, element2, ... , elementn)

从存储内容上看,元组可以存储整数、实数、字符串、列表、元组等任何类型的数据,并且在同一个元组中,元素的类型可以不同,在这个元组中,有多种类型的数据,包括整形、字符串、列表、元组。例如:

("test.com.cn",1,[2,'a'],("abc",3.0))

 

 需要额外注意的一点是,当创建的元组中只有一个元素时,此元组后面必须要加一个逗号“,”,否则 Python 解释器会将其误认为字符串。

[root@kube tuple]# cat demo1.py 
#coding:utf-8
a_tuple =  (1,'a',[2,3],'test')    #tuple 元组用小括号 () 括起来。里面包括数字,字符,列表
print(type(a_tuple))     
b_tuple = ('a',)                   #如果元组就一个元素,那么需要末尾用 ,逗号结束,否则会认为是字符串。
print(type(b_tuple))
c_tuple = ('c')
print(type(c_tuple))
a_list = [1,[2,"hi",4.3],'qaq']
d_tuple = tuple(a_list)             #使用 tuple() 函数可以将列表转换为元组
print(type(d_tuple))
print(d_tuple[:2])                  #可以用分片的方式获取元组数据    
[root@kube tuple]
# py demo1.py <class 'tuple'> <class 'tuple'> <class 'str'> <class 'tuple'> (1, [2, 'hi', 4.3]) [root@kube tuple]#

 

 

python 修改,删除元组元素

元组是不可变序列,元组中的元素不可以单独进行修改。但是,元组也不是完全不能修改

[root@kube tuple]# cat demo2.py 
#coding:utf-8

a_tuple = (1,'test',[2,3])
print(a_tuple)
a_tuple = ("one",'test')                #元组数据可以重新赋值
print(a_tuple)
a_tuple = a_tuple + (1,'we')            #通过+ 号对元组数据进行拼接
print(a_tuple)
del a_tuple                             #del 删除元组数据
print(a_tuple)


[root@kube tuple]# py demo2.py 
(1, 'test', [2, 3])
('one', 'test')
('one', 'test', 1, 'we')
Traceback (most recent call last):
  File "demo2.py", line 10, in <module>
    print(a_tuple)
NameError: name 'a_tuple' is not defined
[root@kube tuple]# 

 

 

python 元组和列表的区别

组和列表最大的区别就是,列表中的元素可以进行任意修改,就好比是用铅笔在纸上写的字,写错了还可以擦除重写;而元组中的元素无法修改,除非将元组整体替换掉,就好比是用圆珠笔写的字,写了就擦不掉了,除非换一张纸。

可以理解为,tuple 元组是一个只读版本的 list 列表。

[root@kube tuple]# cat demo3.py 
listdemo = []
tupledemo = ()

print(listdemo.__sizeof__())
print(tupledemo.__sizeof__())
[root@kube tuple]# py demo3.py 
40
24
[root@kube tuple]#
#事实上,就是由于列表是动态的,它需要存储指针来指向对应的元素(占用 8 个字节)。另外,由于列表中元素可变,所以需要额外存储已经分配的长度大小(占用 8 个字节)。但是对于元组,情况就不同了,元组长度大小固定,且存储元素不可变,所以存储空间也是固定的。

 

当然,如果你想要增加、删减或者改变元素,那么列表显然更优。因为对于元组来说,必须得通过新建一个元组来完成。

总的来说,元组确实没有列表那么多功能,但是元组依旧是很重要的序列类型之一,元组的不可替代性体现在以下这些场景中:

  1. 元组作为很多内置函数和序列类型方法的返回值存在,也就是说,在使用某些函数或者方法时,它的返回值会元组类型,因此你必须对元组进行处理。
  2. 元组比列表的访问和处理速度更快,因此,当需要对指定元素进行访问,且不涉及修改元素的操作时,建议使用元组。
  3. 元组可以在映射(和集合的成员)中当做“键”使用,而列表不行。

 

posted on 2019-09-26 12:46  zzzzy09  阅读(292)  评论(0编辑  收藏  举报