龙空技术网

零基础Python完全自学教程16:Python中的元组系列知识

站长世界 190

前言:

此时兄弟们对“python中元组和列表的区别”大体比较讲究,各位老铁们都想要剖析一些“python中元组和列表的区别”的相关内容。那么小编也在网摘上网罗了一些对于“python中元组和列表的区别””的相关内容,希望我们能喜欢,你们快快来了解一下吧!

欢迎你来到站长学堂,学习站长在线出品的在线课程《零基础 Python完全自学教程》今天给大家分享的是第16课《 Python中的元组系列知识》。本节课是一个大课,我分了这些知识点进行详细讲解:元组的创建和删除详解、访问元组元素详解、遍历元组详解、修改元组详解、元组推导式详解及元组和列表的七大区别详解。

16.1、python中元组的创建和删除详解

温馨提示:本内容和前面所学的《Python中列表的创建和删除详解》内容基本一致,大家可以对照学习。

16.1.1、元组的概念:(和列表类似)

我们可以回顾一下列表的概念:

列表(list)是由一系列的特定顺序排列的元素。它是Python中内置的可变序列。在形式上,列表的所有元素都放在一对中括号“[]”里面,两个相邻的元素之间,使用英文逗号“,”隔开。在内容上,列表可以将整数、实数、字符串、列表、元组任何类型的元素放入列表中,并且同一列表中,元素的类型可以不同,因此他们之间没有任何关系。

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

从元组和列表的定义来看,这两种结构比较相似,但是他们之间的主要区别就是一个不可变序列,一个是可变序列。即元组中的元素不可以单独修改,而列表可以任意修改。

了解了什么是元组,接下来就讲讲创建元组的几个方法了:

16.1.2、在Python中使用赋值运算符“=”创建元组:(和列表类似)

在Python中,创建元组可以使用赋值运算符“=”创建元组,右边是赋值,左边是变量。具体语法如下:

tuplename = (element 1 , element 2 , element 3 , ... , element n)

其中,tuplename 表示元组的名称,可以是任何符合Python命名规则的标识符;element 1 , element 2 ,表示元组中的元素,这些元素的数量没有限制,内容上只要是Python中支持的数据类型如整数、实数、字符串、列表、元组都可以。

如下面的都是合法的元组:

shuzi = (1,2,3,4,5,6,7)                                                        #数字shige = ("床前明月光","疑是地上霜","举头望明月","低头思故乡")                   #诗歌hunhe = (66,"Python",('人生苦短','我用Python'),["WEB开发","云计算","爬虫"])     #混合元组python = ('优雅',"明确",'''简单''')

在 Python 中,元组通常都是使用一对小括号将所有元素包围起来的,但小括号不是必须的,只要将各元素用逗号隔开,Python 就会将其视为元组,请看下面的例子:

shige = "床前明月光","疑是地上霜","举头望明月","低头思故乡" print(shige)

在Python IDLE 中运行结果如下:

('床前明月光', '疑是地上霜', '举头望明月', '低头思故乡')>>> 

当,创建的元组只有一个元素时,需要在元素的后面加“,”,如:

python = ('优雅',)print(python)

运行结果为:

('优雅',)>>> 

当,创建的元组只有一个元素时,元素的后面没有加“,”,被视为定义了一个字符串,如:

python = ('优雅')print(python)

运行结果为:

优雅>>> 

温馨提示:在Python中的内置函数type()可以检测变量的类型,代码如下:

python1 = ('优雅',)python2 = ('优雅')print("python1的类型为:",type(python1))print("python2的类型为:",type(python2))

运行结果为:

python1的类型为: <class 'tuple'>python2的类型为: <class 'str'>>>> 

16.1.3、在Python中创建空的元组():(和列表类似)

在Python中,是可以创建空的元组的,如创建一个空元组代码如下

kong = ()

和空列表一样的原理,我们经常会用到空的元组。一般情况下,空元组用于为函数传递一个空的值,或者返回一个空的值。

16.1.4、在Python中使用tuple()函数创建数值元组:(和列表类似)

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

我们先回顾一下range()函数的使用方法:(在《Python中的循环语句》里面学过)

range(start,end,step)

各参数说明如下:

start:用于指定技术的起始值,可以省略。如果省略则从0开始。

end:用于指定计数的结束值,不能省略。结束值不包括该值,如range(100),则表示值为0~99。当range()函数只有一个参数时,即表示指定计数的结束值。

step:用于指定步长,即两个数之间的间隔,可以省略。如果省略则表示步长为1。如range(1,7)则表示值为1、2、3、4、5、6

tuple() 函数用法如下:

tuple(data)

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

如:创建一个0~20(不包括20)的所有偶数列表,可以使用以下代码:

tuple(range(0,20,2))

运行结果如下:

(0, 2, 4, 6, 8, 10, 12, 14, 16, 18)>>> 

注:使用tuple()函数不仅可以通过range对象创建元组,还可以通过其他的函数对象创建元组。其他函数在后面慢慢会学到的。

16.1.5、在Python中使用del命令删除元组(和列表类似)

在Python中,删除已经创建的元组是很简单的,使用 del 命令即可,语法格式如下:

del 元组名称

如:删除一个叫做 shige 的元组:

shige = ("床前明月光","疑是地上霜","举头望明月","低头思故乡")del shige

但是,如果你删除的是一个不存在的元组,就会报错,如:

shige = ("床前明月光","疑是地上霜","举头望明月","低头思故乡") del sg

当然上面不管是定义了shige 还是没有定义shige 的元组,都是一样,删除sg元组都是不存在的,报错结果如下:

Traceback (most recent call last):  File "D:\Python\Python310\Doc\000.py", line 2, in <module>    del sgNameError: name 'sg' is not defined>>> 

实际开发中并不经常使用 del 来删除元组,因为 Python 自带的垃圾回收机制会自动销毁无用的元组,即使开发者不手动删除,Python 也会自动将其回收。

16.2、在Python中访问元组元素详解

16.2.1、使用print()函数输出内容。

在Python中,如果将元组中的内容输出是比较简单的,使用print()函数即可。

如:我们输出上个知识点的内容中的混合的hunhe元组,只要使用函数print(hunhe)即可

shuzi = (1,2,3,4,5,6,7)                                                        #数字shige = ("床前明月光","疑是地上霜","举头望明月","低头思故乡")                   #诗歌hunhe = (66,"Python",('人生苦短','我用Python'),["WEB开发","云计算","爬虫"])     #混合元组python = ('优雅',"明确",'''简单''')print(hunhe)print(python)

执行结果如下:

(66, 'Python', ('人生苦短', '我用Python'), ['WEB开发', '云计算', '爬虫'])('优雅', '明确', '简单')>>> 

经过对比,不是 输入的是 单引号、双引号、三引号 ,输出的都是 单引号。

通过上述的输出,我们发现,在输出元组时,包括了两侧的小括号()的。

16.2.2、通过索引的方式访问元组元素。

元组是Python中另一个重要的序列结构,也是一个有序的集合,所以要访问元组中的任何元素,您只需要告诉Python元素的位置(索引)。要访问元组元素,首先指出元组的名称,然后指出元素在元组中的位置。

下面,我们来输出混合元组中的第3个和第2个元素,代码如下:

hunhe = (66,"Python",('人生苦短','我用Python'),["WEB开发","云计算","爬虫"])print(hunhe[2])print(hunhe[1])

输出的结果为:

('人生苦短', '我用Python')Python>>>

昨天的内容:

python1 = ('优雅',)python2 = ('优雅')print("python1的类型为:",type(python1))print("python2的类型为:",type(python2))print(python1)print(python2)

输出结果为:

python1的类型为: <class 'tuple'>python2的类型为: <class 'str'>('优雅',)优雅>>> 

上面结果可以看出:在输出的单个元组时,也是包括小括号()。如果是字符串,还不包括左右的引号。

在访问列表元素的时候,我们使用了索引的方法,但是没有讲到切片的方法访问列表元素。在这里,我们讲讲使用切片的方法访问元组。

16.2.3、通过切片的方式访问元组元素。

访问元组元素是可以使用切片的方法,访问元组元素的。

我们访问混合元组的前2个元素,代码为:

hunhe = (66,"Python",('人生苦短','我用Python'),["WEB开发","云计算","爬虫"])     #混合元组print(hunhe[:2])

运行结果为:

(66, 'Python')>>> 

我们访问混合元组的后2个元素,代码为:

hunhe = (66,"Python",('人生苦短','我用Python'),["WEB开发","云计算","爬虫"])     #混合元组print(hunhe[2:])

运行结果为:

(('人生苦短', '我用Python'), ['WEB开发', '云计算', '爬虫'])>>> 

我们访问混合元组的第2个到第3个元素,就会报错了,代码为:

hunhe = (66,"Python",('人生苦短','我用Python'),["WEB开发","云计算","爬虫"])     #混合元组print(hunhe[2,3])

运行结果为:

Traceback (most recent call last):  File "D:\Python\Python310\Doc\000.py", line 2, in <module>    print(hunhe[2,3])TypeError: tuple indices must be integers or slices, not tuple>>> 

实例:我们来输出每日一语。

import datetime                    #导入日期时间类mot = ("信任是最稀缺的货币。",     #定义一个列表       "追求快速,反而死的很惨;有时候,慢也就是快!",        "改编是一门技术,学会改编技术,就会改字成金,这辈子不会缺钱。",       "流量是天然存在的,客户是天然存在的,方法是天然存在的。",       "你的每一个时间都很珍贵,都要放在最有生产力的事情上。",       "万物皆不为我所有,万物皆为我所用。",       "钻石就在你家后院,秘笈就在你的眼前,你却每天视而不见。")day=datetime.datetime.now().weekday()      #获取当前星期print(mot[day])                            #输出每日一语

说明:在上述代码中,datetime.datetime.now()用于获取当前日期,weekday()再则是从日期时间对象中获取星期,其值为0~6中的一个,0位星期一,6为星期日。

在2021年11月9日的运行结果为:

追求快速,反而死的很惨;有时候,慢也就是快!>>> 

16.3、在Python中遍历元组详解

站长在线温馨提示:本节教程内容与《在Python中遍历列表详解》大体一致,大家可以对比学习。(基本上就是把列表改成元组,[]改成(),list改成tuple)

我们先解释一下遍历的意思,遍就是全面,到处的意思,历就是行、游历的意思。所谓遍历就是全部走遍,到处周游的意思。

遍历元组就是从头到尾依次从元组中获取数据。

再次强调一下,元组是一种不可变的序列,不能单个修改某一个元素,但是遍历元组的每一个元素还是可以的。

在Python中,遍历元组的方法有很多种,下面介绍一些常用的遍历方法:

16.3.1、直接使用for循环遍历元组

直接使用for循环遍历元组,只能输出元素的值,语法格式如下:

for 变量元素 in 元组:   #输出变量元素

列如,定义Python的设计理念,然后通过for循环遍历该元组,并输出每条内容。代码如下:

print("Python设计理念:")python = ("优雅","明确","简单")for linian in python:    print(linian)

执行以后结果如下:

Python设计理念:优雅明确简单>>> 

16.3.2、使用for循环和enumerate()函数遍历元组

使用for循环和enumerate()函数可以实现同时输出索引值和元素内容,其语法格式如下:

for index,变量元素 in enumerate(元组)    #输出index和变量元素

例如,定义python的设计理念,然后通过for循环和enumerate()函数遍历该元组,并输出索引和每条内容。代码如下:

print("Python设计理念:")python = ("优雅","明确","简单")for index,linian in enumerate(python):    print(index,linian)

执行结果如下:

Python设计理念:0 优雅1 明确2 简单>>> 

16.3.3、使用for循环和tuple()函数遍历元组

例如,定义python的设计理念,然后通过for循环和tuple()函数遍历该元组,并输出每条内容。代码如下:

print("Python设计理念:")python = ("优雅","明确","简单")for linian in tuple(python):    print(linian)

执行结果如下:

Python设计理念:优雅明确简单>>> 

16.3.4、使用for循环和range()函数遍历元组

定义元组number 的元组,然后通过for循环和range()函数遍历该元组,并输出每条内容。代码如下:

number = (1122,2366,4400,5577,8888)for i in range(len(number)):    print(i,number[i])

执行结果为:

0 11221 23662 44003 55774 8888>>> 

可以不带索引输出,代码为:

number = (1122,2366,4400,5577,8888)for i in range(len(number)):    print(number[i])

运行结果为:

11222366440055778888>>> 

我们把输出的结果,放在同一行,代码为:

number = (1122,2366,4400,5577,8888)for i in range(len(number)):    print(number[i],end=" ")

执行结果为:

1122 2366 4400 5577 8888 >>> 

注意 range()函数只能用于数字的元组,在非数字中就会报错了。

16.3.5、使用for循环和iter()函数遍历元组

列如,定义python的设计理念,然后使用for循环和iter()函数遍历该元组,并输出每条内容。代码如下:

print("Python设计理念:")python = ("优雅","明确","简单")for linian in iter(python):    print(linian)

输出结果如下:

Python设计理念:优雅明确简单>>> 

16.3.6、使用while循环遍历元组

定义,元组number 的元组,然后通过while循环遍历元组并输出每条内容。代码如下:

number = (1122,2366,4400,5577,8888)i = 0while i < len(number):    print(number[i])    i = i + 1

运行结果如下:

11222366440055778888>>> 

16.4、在python中修改元组详解

回顾一下Python中列表元素的更新,我们分了3节课程来分享,分别是添加列表元素、修改列表元素和删除列表元素。但是在元组中,就不能说添加元组元素、修改元组元素和删除元组元素了,因为元组是不可变的序列,也是一种不可变的列表。当然我们也可以尝试一下修改一个元组元素看看,有什么结果?

我们以Python的设计理念(设计哲学)为例,我们来修改一个参数看看:

python = ("优雅","明确","简单")python[2] = "复杂"print(python)

运行结果如下:

Traceback (most recent call last):  File "D:\Python\Python310\Doc\000.py", line 2, in <module>    python[2] = "复杂"TypeError: 'tuple' object does not support item assignment>>> 

翻译一下:“TypeError: 'tuple' object does not support item assignment”就是说:TypeError:“tuple”对象不支持项分配

也就是说在Python的元组是不可以单一修改元组元素的。那怎样才能修改元组呢?下面介绍两个方法:

16.4.1、在Python中直接使用赋值运算符“=”给元组重新赋值。

虽然说元组是不可变的序列,我们不能对单个元素的值进行修改,但是,这并不意味着,元组就完全不能修改了。我们可以对元组进行重新赋值:如:

python = ("优雅","明确","简单")python = ("优雅的","明确的","简单的")print("新元组:",python)

执行结果如下:

新元组: ('优雅的', '明确的', '简单的')>>> 

16.4.2、在Python中使用加赋值运算符“+”连接两个元组。如:

python = ('网站开发','大数据处理','人工智能','自动化运维','云计算')print("原元组:",python)python = python + ('网络爬虫','游戏开发','图形图像处理')print("新元组:",python)

运行结果如下:

原元组: ('网站开发', '大数据处理', '人工智能', '自动化运维', '云计算')新元组: ('网站开发', '大数据处理', '人工智能', '自动化运维', '云计算', '网络爬虫', '游戏开发', '图形图像处理')>>> 

这里值得注意的是,这里是元组和元组之间相“+”是可以的。元组和其他类型就不行了,如:

python = ('网站开发','大数据处理','人工智能','自动化运维','云计算')python = python + ['网络爬虫','游戏开发','图形图像处理']      # 元组+列表print(python)

运行结果如下‘:

Traceback (most recent call last):  File "D:\Python\Python310\Doc\000.py", line 2, in <module>    python = python + ['网络爬虫','游戏开发','图形图像处理']      # 元组+列表TypeError: can only concatenate tuple (not "list") to tuple>>> 

翻译一下:“TypeError: can only concatenate tuple (not "list") to tuple”意思是:TypeError:只能将元组(而不是“列表”)连接到元组。

同理,元组也不能和字符串相连接,如:

python = ('网站开发','大数据处理','人工智能','自动化运维','云计算')python = python + '网络爬虫'      # 元组+字符串print(python)

运行结果:

Traceback (most recent call last):  File "D:\Python\Python310\Doc\000.py", line 2, in <module>    python = python + '网络爬虫'      # 元组+字符串TypeError: can only concatenate tuple (not "str") to tuple>>> 

翻译“TypeError: can only concatenate tuple (not "str") to tuple”意思是:TypeError:只能将元组(而不是“str”)连接到元组。

在这里,还有一点要注意的是:如果元组中只有一个元素时,不要忘记加逗号哦,如:

python = ('网站开发','大数据处理','人工智能','自动化运维','云计算')python = python + ('网络爬虫')print(python)

运行结果为:

Traceback (most recent call last):  File "D:\Python\Python310\Doc\000.py", line 2, in <module>    python = python + ('网络爬虫')TypeError: can only concatenate tuple (not "str") to tuple>>> 

不用翻译了吧,和上面一样的,当元组元素只有一个的时候,被视为字符串,但是加了“,”就被视为元组了哦!

python = ('网站开发','大数据处理','人工智能','自动化运维','云计算')python = python + ('网络爬虫',)print(python)

运行结果如下:

('网站开发', '大数据处理', '人工智能', '自动化运维', '云计算', '网络爬虫')>>> 

16.5、Python中的元组推导式详解

我们在《python中的列表推导式详解》中学过,使用列表推导式可以快速生成一个新的列表,或者根据某个列表生成满足指定需求的列表。

生成指定范围的数值列表,语法格式如下:

list = [Expression for var in range]

那么我们使用列表推导式的方法用于元组推导式行不行呢?

我们根据列表推导式的方法,把“[]”改成“()”试一试:

tuple = (Expression for var in range)

我们也和列表推导式一样的内容:

a1 = (i for i in range(10))               #生成一个10以内的元组a2 = (i for i in range(10) if i % 2 == 0) #生成一个10以内的偶数元组print(a1)print(a2)

运行结果如下:

<generator object <genexpr> at 0x000001DC03E3C900><generator object <genexpr> at 0x000001DC03DBBD10>>>> 

为什么是这样的,而不是下面这样我们想要的呢?

(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)(0, 2, 4, 6, 8)>>> 

从上面的执行结果可以看出,使用元组推导式生成的结果并不是一个元组,而是一个生成器对象,这一点和列表推导式是不同的。

那么怎样才能使用元组推导式获得新的元组呢?

下面讲解3个方法使用元组推导式获得新的元组:

16.5.1、在Python中使用 tuple() 函数,可以直接将生成器对象转换成元组。

要使用该生成器对象,可以转换成元组或者列表。下面我们就上面的内容进行转换成元组和列表,代码如下:

a1 = (i for i in range(10))               #生成一个10以内的元组a2 = (i for i in range(10) if i % 2 == 0) #生成一个10以内的偶数元组print("转换后的元组为:",tuple(a1))            #转换为元组print("转换后的列表为:",list(a2))             #转换为列表

运行结果如下:

转换后的元组为: (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)转换后的列表为: [0, 2, 4, 6, 8]>>> 

16.5.2、在Python中直接使用 for 循环遍历生成器对象,可以获得各个元素。例如:

a = (i for i in range(10))               # 生成一个10以内的元组for i in a:                              # for 循环遍历生成器对象    print(i,end=',')                     # 输出元组元素在同一行显示,并且用“,”隔开print(tuple(a))                          # 输出新元组

运行结果为:

0,1,2,3,4,5,6,7,8,9,()>>> 

16.5.3、 在Python中使用 __next__()方法遍历生成器对象,也可以获得各个元素。例如:

a = (i for i in range(3))    # 生成一个3以内的元组print(a.__next__())          # 输出第一个元素print(a.__next__())          # 输出第二个元素print(a.__next__())          # 输出第三个元素a = tuple(a)                 # 转换为元组print("转换后的元组:",a)    # 输出新元组

运行结果为:

012转换后的元组: ()>>> 

通过上面for循环遍历生成器对象和__next__()方法遍历生成器对象以后,如果还需要使用该生成器对象的话,都必须创建新的生成器对象才行,因为遍历以后,原来的生成器对象已经不存在了,输出的新元组为空。

16.6、python中元组和列表的七大区别详解

元组和列表都是属于序列,都是按照特定顺序储存的一组元素,都可以将整数、实数、字符串、列表、元组、字典、集合等任何类型的内容。创建和删除的方法也是一样。

列表和元组之间还是有区别的,下面站长在线整理了它们之间的7大区别:

16.6.1、列表是动态的,属于可变序列,它的元素可以随时增加、修改或者删除,而元组是静态的,属于不可变序列,无法增加、删除、修改元素,除非整体替换。

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

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

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

16.6.5、因为列表可以修改,元组不可以修改,因此元组比列表具有更高的安全性。

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

16.6.7、存储方式不同:空列表 比空元组多占用16个字节。

>>> lista = []>>> lista.__sizeof__()40>>> tuplea = ()>>> tuplea.__sizeof__()24>>> 

相关阅读:

《零基础Python完全自学教程》目录

1、认识python

2、安装python及写第一个Python程序

3、Python开发工具介绍

4、Python语法特点

5、Python中的变量

6、Python中的基本数据类型

7、Python中的基本输入和输出

8、Python中常用的运算符

9、Python中运算符的优先级和条件表达式

10、Python中的三大程序结构

11、Python中的选择语句

12、Python中的循环语句

13、Python中的break语句、continue语句和pass语句

14、Python中的序列知识详解

15、Python中的列表

标签: #python中元组和列表的区别 #python元组赋值