python-----元组

        元组(tuple)是python中另一个重要的序列结构,与列表类似,也是由一系列按特定顺序排列的元素组成的,但是他是不可变序列,因此元组也可以称为不可变的列表。在形式上,元组的所有元素都放在一对小括号“()”中,两个相邻元素间使用逗号“,”进行分割。在内容上,可以将整数、实数、字符串、列表、元组等任何类型的内容放入元组中,并且同一个元组中,元素的类型可以不同,因为它们之间没有任何关系。在通畅情况下,元组用于保存程序中不可修改的内容。

说明:从元组和列表的定义上看,这两个结构比较相似,它们之间的区别就是一个是可变序列,一个是不可变序列,即元组的元素不可以单独修改,而列表则可以任意修改。

一、元组的创建和删除

        在python中提供了多种创建元组的方法,下面分别进行介绍。

1、使用赋值运算符直接创建元组

        同其它类型的python变量一样,创建元组时,也可以使用赋值运算的“=”直接讲一个元组复制给变量。具体的语法格式如下:

 tuplename = (element 1,element 2,element 3,element 4)

        其中tuplename表示元组的名称,可以是任何符合python命名规则的表示服;element1,2,3,4表示元组的元素,个数没有限制,并且只要是python支持的类型就可以。

注意:创建元组和创建列表的语法类似,只是创建列表时使用的是中括号“[]”而创建元组使用小括号()

例:

number = (7,14,21,28,35,42)       #数字类型
print(number)
str = ("xiwen","zeno","xiaopeng") #字符串类型
print(str)
untile = ("xiwen",28,("xiaopeng","hello"),["xiao","zekai"])  #混合类型
print(untile)
verse = ("一片冰心在玉壶",)  #此为一个字符串非元组,加一个逗号就变为元组
print(verse)
print(type(verse))

执行结果:

(7, 14, 21, 28, 35, 42)
('xiwen', 'zeno', 'xiaopeng')
('xiwen', 28, ('xiaopeng', 'hello'), ['xiao', 'zekai'])
('一片冰心在玉壶',)
<class 'tuple'>

在python中,虽然元组是使用一对小括号将所有的元素括起来,但是实际上,小括号并不是必须的,只要将一组值使用逗号分隔开来,python就可以认为他们是元组

2、创建空元组

        在python中,也可以创建空元组,例如,要创建一个名称为emptyuple的空元组,可以使用以下代码:

mptytuple = ()       #为函数返回一个元组类的值
print(emptytuple)

空元组可以应用在为函数传递一个空值或者返回空值时,例如定义一个函数必须传递一个元组类型的值,而我们还不想为他传递一组数据,那么就可以创建一个空元组传递给他。

3、创建数值元组

        在python中,可以使用tuple()函数直接将range()函数循环出来的结果转换为数值元组。

        tuple()函数语法如下:

tuple(data)

其中data表示可以转换为元组的数据,其类型可以时range对象、字符串、元组或者其他可迭代类型的数据。

例:

tuple1 = tuple (range(2,21,2),)
print(tuple1)

执行结果:(2, 4, 6, 8, 10, 12, 14, 16, 18, 20)

说明:使用tuple()函数不仅能通过range对象创建元组,还可以通过其他对象创建元组。

4、删除元组

对于删除元组,不在使用时,可以使用del语句将其删除。语法格式如下:

del tuplename

其中,tuplename为要删除元组的名称。

del语句并不常用,因为python自带的垃圾回收机制

例:

tuple1 = tuple (range(2,21,2),)
print(tuple1)
del tuple1     #删除不存在的元组就会出现错误
print(tuple1)

二、访问元组元素

        在python中,如果想将元组的内容输出的比较简单,可以直接使用print()函数。例如,想打印上面元组中的untile元组,即可使用下面代码:

untile = ("xiwen",28,("xiaopeng","hello"),["xiao","zekai"])
print(untile)

执行结果:('xiwen', 28, ('xiaopeng', 'hello'), ['xiao', 'zekai'])

        从上面的执行结果来看,在输出元组时,是包括左右两侧的小括号。如果不想输出全部元素,也可以通过元组的索引获取指定元素。例如,要获取元组untile中元组索引为0的元素,可以使用下面代码:

print(untile[0])

执行结果:xiwen

        从上面的执行结果中可以看出,在输出单个元组元素时,不包括小括号。如果是字符串,还不包括左右两边的引号。

        另外,对于元组也可以采用切片的方式获取指定元素。例如,要访问上个元组的前三个元素,可以使用下面代码:

print(untile[:3])

执行结果:('xiwen', 28, ('xiaopeng', 'hello'))

同列表一样,元组也可以使用for循环进行遍历。下面通过一个具体的实例演示如何通过for循环遍历元组。

for item in untile:
    print(item)

执行代码:

xiwen
28
('xiaopeng', 'hello')
['xiao', 'zekai']

三、修改元组元素

        定一个包含6个元素的元组,修改其中第5个元素的内容,代码如下:

coffeename = ("lanshan","kabuqiluo","mantening","shexiangmao","gelunbiya")

coffeename[4] = '拿铁'

print(coffeename)

执行结果会报错

元组不可变序列,所以我们不能对他单个元素的值进行修改。但是元组也不是完全不能修改,我们可以对元组进行重新赋值。例如,下面代码是允许的:

coffeename = ("lanshan","kabuqiluo","mantening","shexiangmao","gelunbiya")
coffeename = ("lanshan","kabuqiluo","moka","shexiangmao","gelunbiya")
print(coffeename)

执行结果:('lanshan', 'kabuqiluo', 'moka', 'shexiangmao', 'gelunbiya')

        从上面代码可以看出,元组coffeename的值已经改变

        另外,还可以对元组进行连接组合。

newcoffeename = ("weiyena","nini")
allcoffeename = coffeename + newcoffeename
print(allcoffeename)
执行结果:('lanshan', 'kabuqiluo', 'moka', 'shexiangmao', 'gelunbiya', 'weiyena', 'nini')

注意:在元组连接时,连接的元组必须都是元组。不能将元组和字符串或者列表进行连接。例如,下面代码是错误的:

newcoffeename = ("weiyena","nini")

allcoffeename = “ukguzheng”+ newcoffeename

在进行元组连接时,如果要连接的元组只有一个元素时,一定不要忘记后面的逗号。

四、元组推导式

        使用元组推导式可以快速生成一个元组,它的表现形式和列表推导式类似,只是将列表推导式中的中括号[]修改为小括号()。例如我们可以使用下面的代码生成一个包含10个随机数元组

import random      #导入random标准库
randomnumber = (random.randint(10,100) for i in range(10))
print(randomnumber) 

执行结果:<generator object <genexpr> at 0x7fc5f81c29e0>

从上面的执行结果中可以看出,使用元组推导式生成的结果并不是一个元组或者列表,而是一个生成器对象,这一点和列表推导式不同。要使用该生成器对象可以将其转换为元组或者列表。其中,转换为元组使用tuple()函数,而转换为列表使用list()函数。

使用元组推导式生成10个随机数的生成队象,然后将其转换为元组输出,可以使用下面代码:

import random      #导入random标准库
randomnumber = (random.randint(10,100) for i in range(10))
print(randomnumber) #生成一个生成器对象
print(tuple(randomnumber))

执行结果:(43, 87, 68, 100, 59, 84, 13, 80, 69, 21)

要使用通过元组推导器生成的生成器对象,还可以直接通过for循环遍历或者直接使用_next()_方法进行遍历;

说明:在python中next()用于遍历生成器对象

例如,通过生成器推导式生成一个包含3个元素的生成器对象number,然后调用3次_next()_方法输出每个元素,在生成器对象number转换为元组输出;

import random      #导入random标准库
randomnumber = (random.randint(10,100) for i in range(10))print(randomnumber.__next__())  #输出第一个元素
print(randomnumber.__next__())  #输出第二个元素

执行结果:88
                    71

再例如,通过生成器推导式生成一个包括4个元素的生成器对象number,然后应用for循环遍历生成器对象,并输出每一个元素的值,最后再将其转换为元组输出,代码如下:

number = (i for i in range(4))
for i in number:
    print(i,end=" ")
print(tuple(number))

执行结果:0 1 2 3 ()

从上面的两个实例中可以看出,无论通过那种方法遍历,如果还想再使用该生成器对象都必须重新创建一个生成器对象,因为遍历后原生成器对象已经不存在了。

五、元组与列表的区别

        元组和列表都属于序列,他们都可以按照特定的序列存放一组元素,而且类型不受限制,只要python支持类型都可以。那么他们之间有什么区别?

简单理解:列表可以修改,

                   元组不能修改,可以从新创建

列表与元组的区别:

        列表属于可变序列,它的元素可以随时修改和删除,而元组属于不可变序列,其中的元素不可以修改,除非整体替换。

        列表可以使用append()、extend()、insert()、remove()和pop()等方法实现添加和修改列表元素,而元组没有这几种办法,因为不能向元组中添加和修改元素,同样,也不能删除元素。

        列表可以使用切片访问和修改列表的元素。元组也支持切片,但是他只支持通过切片访问元组中的元素,不支持修改。

        元组比列表的访问和处理速度快。所以如果只需要对其中的元素进行访问,而不进行任何修改,建议使用元组不使用列表。        

        列表不能作为字典的键,而元组可以

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值