元组是用圆括号括起来的,其中的元素之间用逗号隔开。(都是英文半角)

元组中的元素类型是任意的 Python 数据。

这种类型,可以歪着想,所谓“元”组,就是用“圆”括号啦。

其实,你不应该对元组陌生,还记得前面讲述字符串的格式化输出时,有这样一种方式:

print "I love %s, and I am a %s" % ('python', 'programmer')I love Python, and I am a programmer

这里的圆括号,就是一个元组。

显然,tuple 是一种序列类型的数据,这点上跟 list/str 类似。它的特点就是其中的元素不能更改,这点上跟 list 不同,倒是跟 str 类似;它的元素又可以是任何类型的数据,这点上跟 list 相同,但不同于 str。

>>> t = 1,"23",[123,"abc"],("python","learn")   #元素多样性,近 list
>>> t
(1, '23', [123, 'abc'], ('python', 'learn'))>>> t[0] = 8                                   #不能原地修改,近 str
Traceback (most recent call last):File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment>>> t.append("no")
Traceback (most recent call last):File "<stdin>", line 1, in <module>
AttributeError: 'tuple' object has no attribute 'append'>>> 

从上面的简单比较似乎可以认为,tuple 就是一个融合了部分 list 和部分 str 属性的杂交产物。此言有理。

索引和切片

因为前面有了关于列表和字符串的知识,它们都是序列类型,元组也是。因此,元组的基本操作就和它们是一样的。

例如:

>>> t
(1, '23', [123, 'abc'], ('python', 'learn'))
>>> t[2]
[123, 'abc']
>>> t[1:]
('23', [123, 'abc'], ('python', 'learn'))>>> t[2][0]     #还能这样呀,哦对了,list 中也能这样
123
>>> t[3][1]
'learn'

关于序列的基本操作在 tuple 上的表现,就不一一展示了。看官可以去试试。

但是这里要特别提醒,如果一个元组中只有一个元素的时候,应该在该元素后面加一个半角的英文逗号。

>>> a = (3)
>>> type(a)
<type 'int'>>>> b = (3,)
>>> type(b)
<type 'tuple'>

以上面的例子说明,如果不加那个逗号,就不是元组,加了才是。这也是为了避免让 Python 误解你要表达的内容。

顺便补充:如果要想看一个对象是什么类型,可以使用 type()函数,然后就返回该对象的类型。

所有在 list 中可以修改 list 的方法,在 tuple 中,都失效。

分别用 list()和 tuple()能够实现两者的转化:

>>> t
(1, '23', [123, 'abc'], ('python', 'learn'))
>>> tls = list(t)                           #tuple-->list
>>> tls
[1, '23', [123, 'abc'], ('python', 'learn')]>>> t_tuple = tuple(tls)                    #list-->tuple
>>> t_tuple
(1, '23', [123, 'abc'], ('python', 'learn'))

tuple 用在哪里?

既然它是 list 和 str 的杂合,它有什么用途呢?不是用 list 和 str 都可以了吗?

在很多时候,的确是用 list 和 str 都可以了。但是,看官不要忘记,我们用计算机语言解决的问题不都是简单问题,就如同我们的自然语言一样,虽然有的词汇看似可有可无,用别的也能替换之,但是我们依然需要在某些情况下使用它们.

一般认为,tuple 有这类特点,并且也是它使用的情景:

  • Tuple 比 list 操作速度快。如果您定义了一个值的常量集,并且唯一要用它做的是不断地遍历它,请使用 tuple 代替 list。
  • 如果对不需要修改的数据进行 “写保护”,可以使代码更安全。使用 tuple 而不是 list 如同拥有一个隐含的 assert 语句,说明这一数据是常量。如果必须要改变这些值,则需要执行 tuple 到 list 的转换 (需要使用一个特殊的函数)。
  • Tuples 可以在 dictionary(字典,后面要讲述) 中被用做 key,但是 list 不行。Dictionary key 必须是不可变的。Tuple 本身是不可改变的,但是如果您有一个 list 的 tuple,那就认为是可变的了,用做 dictionary key 就是不安全的。只有字符串、整数或其它对 dictionary 安全的 tuple 才可以用作 dictionary key。
  • Tuples 可以用在字符串格式化中。

python学习笔记(三)tuple(元组)相关推荐

  1. Python学习笔记三之编程练习:循环、迭代器与函数

    Python学习笔记三之编程练习 1. 编程第一步 # 求解斐波纳契数列 #/user/bin/python3#Fibonacci series:斐波那契数列 #两个元素的总和确定了下一个数 a,b= ...

  2. python学习笔记四一列表元组字典等

    •python中的内置类型◾str ◾list ◾tuple ◾set ◾dict •list 列表 •一组由有序数据组成的序列◾数据有先后数据 ◾数据可以不是一类数据 •list 的创建◾直接创建, ...

  3. python学习笔记8(元组、字符串)

    元组.字符串 元组(tuple) 本质:是一种有序集合 特点: 1.与列表非常相似 2.一旦初始化就不能修改 3.使用小括号 创建 **格式:**元组名 = (元组元素1, 元组元素2, --, 元组 ...

  4. python学习笔记列表和元组(三)

    列表(list) 是Python以及其他语言中最常用到的数据结构之一.Python使用使用中括号 [ ] 来解析列表.列表是可变的(mutable)--可以改变列表的内容. 对应操作: 1.查([]切 ...

  5. python学习笔记-day2-dict,tuple, string常用函数

    上一篇说了Python的list的基本方法,这里接着说说dict,tuple. 一.tuple,元组 1.元组的定义 或: 2.使用切片访问元组里的元素 详细的可以参考list的切片用法 3.元组是不 ...

  6. 【懒懒的Python学习笔记三】

    在上一章中,我们学习了如何创建列表.访问列表元素和简单的列表排序.那么在本章中,我们将进一步学习如何遍历整个列表和对列表更多的操作. 一.遍历列表 我们经常需要遍历整个列表,对每个元素执行相同的操作, ...

  7. Python学习笔记三

    参考教程:廖雪峰官网https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000 一.函数的定 ...

  8. Python学习笔记三(文件操作、函数)

    一.文件处理 1.文件打开模式 打开文本的模式,默认添加t,需根据写入或读取编码情况添加encoding参数. r   只读模式,默认模式,文件必须存在,不能存在则报异常. w  只写模式,若文件不存 ...

  9. 莫烦python学习笔记之tuple,list,字典

    tuple 用小括号.或者无括号来表述,是一连串有顺序的数字. a_tuple = (12, 3, 5, 15 , 6) another_tuple = 12, 3, 5, 15 , 6 list 以 ...

  10. python学习笔记三 pickle序列化

    import pickle f=file('asdf.txt','wb') pickle.dump(saved_info,f)#保存pickle信息 f.close() f=file(asdf.txt ...

最新文章

  1. Java 中的多线程你只要看这一篇就够了
  2. retrofit content-length为0_大佬们,一波RxJava 3.0来袭,请做好准备~
  3. java11+osgi_错误学习:Java + OSGi
  4. 华为路由器配置DHCP中继
  5. C# 定义了 7 种变量类别:静态变量、实例变量、数组元素、值参数、引用参数、输出参数和局部变量
  6. Magento的基本架构
  7. 荷兰特温特大学研究人员、博士后招聘
  8. 大学数学实验习题--统计推断 03(附答案)
  9. 海思16DV300 移动侦测
  10. 几种统计图表的作用和区别
  11. 利用JAVA求定积分
  12. 2020年显卡天梯图
  13. mysql5.7优化
  14. MATLAB resample函数
  15. java 抛出异常的作用_Java 基础之异常抛出
  16. 浙江大华后端开发一面面经
  17. vs 单元测试 无法正常启动 配置系统未能初始化
  18. Paxos (computer science)
  19. 原创记忆小游戏-HTML网页版
  20. Android项目打包,及高德地图服务配置

热门文章

  1. 22行代码AC——例题7-1除法(Division UVa 725)——解题报告
  2. 快来mark! 结构体重载运算符大全(运算、比较、赋值、输入输出)
  3. 单臂路由中路由器通用配置示意图
  4. 服务器系统2012怎么多人连接,windows2012服务器TCP连接数
  5. android 自定义键盘字体大小,android.inputmethodservice.KeyboardView 自定义键盘 字体大小设置...
  6. 分度值1g是什么意思_都什么年代了,还有人在 MySQL 索引上碰一鼻子灰?
  7. 手机和Linux蓝牙通信,[原创]linux下手机与蓝牙的连接配置
  8. kubernetes英语怎么读_陷阱英语单词怎么读?
  9. 计算机专业博士在体制内做啥工作,体制内裸辞,三十多岁大龄考博,我收获了什么?...
  10. android palette组件用法,Palette颜色提取使用详解