草庐IT

Python 元组tuple详解(超详细)

LeoATLiang 2023-04-13 原文

文章目录

Python内置函数/方法详解—元组tuple

元组是有序不可更改的集合。在Python中,元组使用圆括号 () 编写的。

1、创建元组

元组的创建很简单,使用圆括号 () 直接创建或者使用 tuple() 函数创建,只需要在圆括号中添加元素,并使用逗号隔开即可。

1.1 使用 () 创建元组

通过 () 创建元组后,使用 = 将它赋值给变量,格式如下:

tuple_name = (element_1, element_2, ..., element_n)

其中,tuple_name 表示变量名,element_1 ~ element_n 表示元组内的元素。

1.2 使用 tuple()函数 创建元组

我们除了可以使用 () 创建元组,还可以使用 tuple() 函数创建元组,但 tuple() 偏向于将某个类型转换为元组,具体用法见下述:

cre_tuple = tuple(('a', 'b', 'c'))  # 注意双括号
print(cre_tuple)
print(type(cre_tuple))
('a', 'b', 'c')
<class 'tuple'>

1.3 元组(单个元素)

当元组中只包含一个元素时,需要在元素后面添加逗号, ,否则括号会被当作运算符使用:

tuple_1 = (20)
print(type(tuple_1))  # <class 'int'>

tuple_2 = (20,)
print(type(tuple_2))  # <class 'tuple'>

当元组中只含一个元素未添加逗号时,使用 type() 打印其类型时,会输出 <class 'int'>

当元组中只含一个元素并添加逗号时,使用type() 打印其类型时,会输出 <class 'tuple'>

1.4 元组 VS 列表

  • 在Python中,元组与列表相似,不同之处在于元组的元素不能修改,而列表的元素可以修改
  • 元组使用 小括号(),列表使用 中括号[]

2、访问元组

和列表一样,我们既可以使用下标索引访问元组中的某个元素(得到一个元素的值),也可以使用切片访问元组中的一组元素(得到是子元组)。

2.1 下标索引访问

下标索引访问元组分为两大类,即正向索引反向索引,格式为 tuple_name[i] ,其中,tuple_name 表示元组名,i表示索引值,i可以是正数(正向索引)也可以是负数(反向索引)。

可以得知,tuple_name[0]表示元组内第一个元素tuple_name[-1]则表示元组内最后一个元素

tuple_name = ('wzq', 'lgl', 'gz', 'whl', 'sj', 'hxw')
print(tuple_name[0])
print(tuple_name[-1])
wzq
hxw

正向索引:从第一个(下标0)开始、第二个(下标1)…

反向索引:从倒数第一个(下标-1)、倒数第二个(下标-2)…

2.2 切片访问

如若对上方描述不太理解,可参考下表:

元组值wzqlglgzwhlsjhxw
正向索引012345
反向索引-6-5-4-3-2-1

使用切片访问元组的格式为 tuple_name[strat : end : step] ,其中,start 表示起始索引,end 表示结束索引,step 表示步长。

tuple_name = ('wzq', 'lgl', 'gz', 'whl', 'sj', 'hxw')
print(tuple_name[1:5:2])
print(tuple_name[-6:-1:3])
('lgl', 'whl')
('wzq', 'whl')

在使用切片访问元组元素时,tuple_name[strat : end : step],[start:end] 是左闭右开区间,即访问不了 end 代表的元素。

2.3 for 循环遍历元组

可以使用 for 循环遍历元组中的项目:

fruit_tuple = ('apple', 'pear', 'cherry')
for i in fruit_tuple:
    print(i)
apple
pear
cherry

2.4 检查项目是否存在

要确定元组中是否存在指定的项,我们可以使用 in 关键字:

# 检查元组中是否存在'apple'
fruit_tuple = ('apple', 'pear', 'cherry')
print('apple' in fruit_tuple)
True

使用 in 关键字检查元组中是否存在指定项时,如果存在,则返回 True ;反之,则返回 False

2.5 更改元组值

创建元组后,我们将无法更改其值。元组是不可变的,或者也被称为恒定的。

但是有一种解决方法:可以先将元组转换为列表,更改列表值,然后再将其转换回元组

fruit_tuple = ('apple', 'pear', 'cherry')
fruit_list = list(fruit_tuple)
fruit_list[2] = 'banana'
fruit_tuple = tuple(fruit_list)
print(fruit_tuple)
('apple', 'pear', 'banana')

2.6 元组连接(合并)/复制

与字符串一样,元组之间可以使用 + 号和 * 号实现元组的连接复制,这就意味着它们可以生成一个新的元组。

1、+连接

x = (1, 2, 3)
y = (4, 5, 6)
print(x + y)
(1, 2, 3, 4, 5, 6)

2、*复制

x = ('Hello',)
print(x * 5)
('Hello', 'Hello', 'Hello', 'Hello', 'Hello')

2.7 元组不可变性

所谓元组的不可变性指的是元组所指向的内存中的内容不可变。

tup = ('A', 'B', 'C')
# tup[0] = 'a'

不支持修改元素,会报错 TypeError: 'tuple' object does not support item assignment

tup = ('A', 'B', 'C')
print(id(tup))
# 查看内存地址
tup = (1, 2, 3)
print(id(tup))
2671405067264
2671405072256

从以上实例可以看出,重新赋值的元组 tup ,绑定到了新的对象了,不是修改了原来的对象。

3、内置函数

3.1 打印输出 print()

1、print()函数

print() 函数的功能我们已经非常熟悉了,就是打印输出。

my_tuple = ('name', True, 21)
print(my_tuple)
('name', True, 21)

3.2 确定元组项目 len()

2、len()函数

当我们要确定一个元组有多少项目(元素)时,可以使用len()函数。

fruit_tuple = ('apple', 'banana', 'cherry')
print(len(fruit_tuple))
3

3.3 返回变量类型 type()

3、type()函数

使用 type() 函数可以确定变量是什么类型(字符串、列表、元组、字典或集合)。

当对tup_1 = (20)使用 type() 确定变量类型时,会返回<class 'int'>,表明这是一个整型。所以当一个元组只含有一个元素时,一定要加上逗号,

当对tup_1 = (20,)使用 type() 确定变量类型时,会返回<class 'tuple'>,表明这是一个元组

3.4 转换为元组 tuple()

4、tuple()函数

tuple() 函数的功能是,将其他类型转换为元组类型,详细用法如下:

  • 将字符串转换为元组
str1 = 'Hello Python'
print(tuple(str1))
('H', 'e', 'l', 'l', 'o', ' ', 'P', 'y', 't', 'h', 'o', 'n')
  • 将列表转换为元组
list1 = ['Hello', 'Python']
print(tuple(list1))
('Hello', 'Python')
  • 将字典转换为元组
dict1 = {'Hello': 'Python', 'name': 'pink'}
print(tuple(dict1))
('Hello', 'name')
  • 将集合转换为元组
set1 = {'Hello', 'Python', 'name', 'pink'}
print(tuple(set1))
('Hello', 'name', 'Python', 'pink')
  • 将区间转换为元组
range1 = range(1, 6)
print(tuple(range1))
(1, 2, 3, 4, 5)

3.5 元组元素最大/小值 max()、min()

5、max()函数和min()函数

max() 函数的作用是返回元组中元素最大值min() 函数的作用是返回元组中元素最小值

tup1 = (4, 6, 2, 0, -5)
print(max(tup1))
print(min(tup1))

tup2 = ('a', 'z', 'A', 'Z')
print(max(tup2))
print(min(tup2))
6
-5
z
A

3.6 删除元组 del

元组中的元素值是不允许删除的,但我们可以使用 del 函数来删除整个元组。

word_tuple = ('a', 'b', 'c')
del word_tuple

当我们使用 del 函数删除某元组后,再使用 print() 函数打印输出时,会报错NameError: name 'word_tuple' is not defined,表明该元组未被定义。

4、内置方法

4.1 元素出现次数 count()

count() 方法返回指定值在元组中出现的次数。

语法

tuple.count(value)

参数值

参数秒速
value必需。要检索的项目。

实例

返回值 5 在元组中出现的次数:

num_tuple = (1, 3, 7, 8, 7, 5, 4, 6, 8, 5, 5)
print(num_tuple.count(5))
3

4.2 元素位置 index()

index() 方法查找指定值的第一次出现。

语法

tuple.index(value)

参数值

参数描述
value必需。要检索的项目。

实例

num_tuple = (1, 3, 7, 8, 7, 5, 4, 6, 8, 5, 5)
print(num_tuple.index(5))
5

注意:当被搜索值在元组中存在多个,则返回第一次出现的下标。

num_tuple = (1, 3, 7, 8, 7, 5, 4, 6, 8, 5, 5)
print(num_tuple.index(999))

如果未找到该值,index() 方法将引发异常,ValueError: tuple.index(x): x not in tuple

5、总结

函数描述
print()打印输出
len()确定元组项目
type()返回变量类型
tuple()转换为元组
max()返回元组元素最大值
min()返回元组元素最小值
del删除元组
方法描述
count()返回元组中指定值出现的次数
index()在元组中搜索指定的值并返回它被找到的位置

以上就是本文的全部内容啦!如果对您有帮助,麻烦点赞啦!收藏啦!欢迎各位评论区留言!!!

最后编辑于:2022/7/25 20:43

有关Python 元组tuple详解(超详细)的更多相关文章

  1. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  2. Python 相当于 Perl/Ruby ||= - 2

    这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Pythonconditionalassignmentoperator对于这样一个简单的问题表示歉意,但是谷歌搜索||=并不是很有帮助;)Python中是否有与Ruby和Perl中的||=语句等效的语句?例如:foo="hey"foo||="what"#assignfooifit'sundefined#fooisstill"hey"bar||="yeah"#baris"yeah"另外,类似这样的东西的通用术语是什么?条件分配是我的第一个猜测,但Wikipediapage跟我想的不太一样。

  3. java - 什么相当于 ruby​​ 的 rack 或 python 的 Java wsgi? - 2

    什么是ruby​​的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht

  4. 华为OD机试用Python实现 -【明明的随机数】 2023Q1A - 2

    华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o

  5. python - 如何读取 MIDI 文件、更改其乐器并将其写回? - 2

    我想解析一个已经存在的.mid文件,改变它的乐器,例如从“acousticgrandpiano”到“violin”,然后将它保存回去或作为另一个.mid文件。根据我在文档中看到的内容,该乐器通过program_change或patch_change指令进行了更改,但我找不到任何在已经存在的MIDI文件中执行此操作的库.他们似乎都只支持从头开始创建的MIDI文件。 最佳答案 MIDIpackage会为您完成此操作,但具体方法取决于midi文件的原始内容。一个MIDI文件由一个或多个音轨组成,每个音轨是十六个channel中任何一个上的

  6. 「Python|Selenium|场景案例」如何定位iframe中的元素? - 2

    本文主要介绍在使用Selenium进行自动化测试或者任务时,对于使用了iframe的页面,如何定位iframe中的元素文章目录场景描述解决方案具体代码场景描述当我们在使用Selenium进行自动化测试的时候,可能会遇到一些界面或者窗体是使用HTML的iframe标签进行承载的。对于iframe中的标签,如果直接查找是无法找到的,会抛出没有找到元素的异常。比如近在咫尺的例子就是,CSDN的登录窗体就是使用的iframe,大家可以尝试通过F12开发者模式查看到的tag_name,class_name,id或者xpath来定位中的页面元素,会抛出NoSuchElementException异常。解决

  7. 在VMware16虚拟机安装Ubuntu详细教程 - 2

    在VMware16.2.4安装Ubuntu一、安装VMware1.打开VMwareWorkstationPro官网,点击即可进入。2.进入后向下滑动找到Workstation16ProforWindows,点击立即下载。3.下载完成,文件大小615MB,如下图:4.鼠标右击,以管理员身份运行。5.点击下一步6.勾选条款,点击下一步7.先勾选,再点击下一步8.去掉勾选,点击下一步9.点击下一步10.点击安装11.点击许可证12.在百度上搜索VM16许可证,复制填入,然后点击输入即可,亲测有效。13.点击完成14.重启系统,点击是15.双击VMwareWorkstationPro图标,进入虚拟机主

  8. python ffmpeg 使用 pyav 转换 一组图像 到 视频 - 2

    2022/8/4更新支持加入水印水印必须包含透明图像,并且水印图像大小要等于原图像的大小pythonconvert_image_to_video.py-f30-mwatermark.pngim_dirout.mkv2022/6/21更新让命令行参数更加易用新的命令行使用方法pythonconvert_image_to_video.py-f30im_dirout.mkvFFMPEG命令行转换一组JPG图像到视频时,是将这组图像视为MJPG流。我需要转换一组PNG图像到视频,FFMPEG就不认了。pyav内置了ffmpeg库,不需要系统带有ffmpeg工具因此我使用ffmpeg的python包装p

  9. Python 刷Leetcode题库,顺带学英语单词(31) - 2

    ValidPalindromeGivenastring,determineifitisapalindrome,consideringonlyalphanumericcharactersandignoringcases. [#125]Example:"Aman,aplan,acanal:Panama"isapalindrome."raceacar"isnotapalindrome.Haveyouconsiderthatthestringmightbeempty?Thisisagoodquestiontoaskduringaninterview.Forthepurposeofthisproblem

  10. python - 是否可以使用 Ruby 或 Python 禁用 anchor /引用来发出有效的 YAML? - 2

    是否可以在PyYAML或Ruby的Psych引擎中禁用创建anchor和引用(并有效地显式列出冗余数据)?也许我在网上搜索时遗漏了一些东西,但在Psych中似乎没有太多可用的选项,而且我也无法确定PyYAML是否允许这样做.基本原理是我必须序列化一些数据并将其以可读的形式传递给一个不是真正的技术同事进行手动验证。有些数据是多余的,但我需要以最明确的方式列出它们以提高可读性(anchor和引用是提高效率的好概念,但不是人类可读性)。Ruby和Python是我选择的工具,但如果有其他一些相当简单的方法来“展开”YAML文档,它可能就可以了。 最佳答案

随机推荐