微信公众号:码农充电站pro

个人主页:https://codeshellme.github.io

软件工程的目标是控制复杂度,而不是增加复杂性。

—— Dr. Pamela Zave

目录

我们在上一节介绍了Python 列表list 数据结构,本节来介绍一下元组tuple

1,Python 元组

元组与列表有些相似,它们之间最显著的不同是,元组一旦定义了以后,就不能再修改(增加/删除其中的元素),而列表可以被任意的改。

Python 元组有如下特点:

  • 元组中的元素可以是任意类型的数据
  • 可使用下标和切片访问元组内容
  • 元组一点定义,不能再被修改

2,定义元组

我们已经知道了定义列表使用中括号[],而定义元组使用小括号() 表示:

  1. >>> t = () # 一个空的元组
  2. >>> t
  3. ()
  4. >>> t = ('a', 1, 3.5, True) # 元组中可以存放任意类型
  5. >>> t
  6. ('a', 1, 3.5, True)

只有一个元素的元组

当定义的元组中只有一个元素时,需要在元素后边加个逗号:

  1. >>> t = (1,)
  2. >>> t
  3. (1,)

如果没带逗号,则这个小括号()将不会被认为是元组符号:

  1. >>> t = (1) # 相当于没有带小括号
  2. >>> t
  3. 1
  4. >>> t = ('abc')
  5. >>> t
  6. 'abc'

3,元组的大小

可以使用len() 来查看一个元组的大小:

  1. >>> t = ('a', 'b', 'c')
  2. >>> len(t) # 长度为 3
  3. 3
  4. >>> t = (1, 3)
  5. >>> len(t) # 长度为 2
  6. 2

4,访问元组

可以像访问列表一样,使用下标切片,和 for 循环来访问元组。

使用下标访问元组

  1. >>> t = ('a', 'b', 'c')
  2. >>> t[0] # 访问第一个元素
  3. 'a'
  4. >>> t[3] # 下标越界
  5. Traceback (most recent call last):
  6. File "<stdin>", line 1, in <module>
  7. IndexError: tuple index out of range
  8. >>> t[-1] # 访问倒数第一个元素
  9. 'c'
  10. >>> t[-3] # 访问倒数第三个元素
  11. 'a'
  12. >>> t[-4] # 下标越界
  13. Traceback (most recent call last):
  14. File "<stdin>", line 1, in <module>
  15. IndexError: tuple index out of range

使用切片访问元组

  1. >>> t = ('a', 'b', 'c')
  2. >>> t[1:3]
  3. ('b', 'c')
  4. >>> t[2:]
  5. ('c',)
  6. >>> t[:3]
  7. ('a', 'b', 'c')
  8. >>> t[:]
  9. ('a', 'b', 'c')

遍历元组

  1. >>> t = ('a', 'b', 'c')
  2. >>> for i in t:
  3. ... print(i)
  4. ...
  5. a
  6. b
  7. c

5,元组不可修改

元组是不可变类型,不能对一个已定义的元组进行以下操作,否则会抛出异常:

  • 添加元素
  • 修改元素
  • 删除元素

示例:

  1. >>> t = ('a', 'b', 'c')
  2. >>> # 没有对于元组的添加操作,所以也不用演示
  3. >>>
  4. >>> t[0] = 1 # 修改元素,抛出异常
  5. Traceback (most recent call last):
  6. File "<stdin>", line 1, in <module>
  7. TypeError: 'tuple' object does not support item assignment
  8. >>>
  9. >>> del t[1] # 删除元素,抛出异常
  10. Traceback (most recent call last):
  11. File "<stdin>", line 1, in <module>
  12. TypeError: 'tuple' object doesn't support item deletion

6,元组运算

像列表一样,元组也可以进行加运算乘运算in 运算

  1. >>> ('a', 'b') + (1, 2) # 加运算,得到一个新的元素
  2. ('a', 'b', 1, 2)
  3. >>>
  4. >>> ('a', 'b') * 2 # 乘运算,相当于 n 个元素相加
  5. ('a', 'b', 'a', 'b')
  6. >>>
  7. >>> ('a', 'b') * -1 # n 小于等于 0 时,得到一个空元组
  8. ()
  9. >>> 'a' in ('a', 'b') # in 运算,判断一个元素是否包含在元组中
  10. True
  11. >>> 'a' not in ('a', 'b')
  12. False

7,元组函数

通过dir(tuple) 查看元组支持的方法:

  1. ['__add__', '__class__', '__contains__',
  2. '__delattr__', '__dir__', '__doc__',
  3. '__eq__', '__format__', '__ge__',
  4. '__getattribute__', '__getitem__',
  5. '__getnewargs__', '__gt__', '__hash__',
  6. '__init__', '__init_subclass__',
  7. '__iter__', '__le__', '__len__',
  8. '__lt__', '__mul__', '__ne__',
  9. '__new__', '__reduce__', '__reduce_ex__',
  10. '__repr__', '__rmul__', '__setattr__',
  11. '__sizeof__', '__str__', '__subclasshook__',
  12. 'count', 'index']

可以看到处了魔法方法,元组类型仅支持两个方法:

  • count 方法
  • index 方法

且没有任意一个方法用于修改元组。

1.count 方法

作用:计算元组T 中值为value 的个数

原型:T.count(value) -> integer

参数:要计算的元素的值

返回值:个数

示例:

  1. >>> t = ['a', 'b', 'c', 'a']
  2. >>> t.count('a')
  3. 2
  4. >>> t.count('b')
  5. 1
  6. >>> t.count('d')
  7. 0

2.index 方法

作用:从元组T[start:stip] 中查找第一个值为value 的元素

原型:T.index(value, [start, [stop]]) -> integer

参数 value:查找值为value 的元素

参数 start:元组T 的起始下标

参数 stop:元组T 的终止下标

返回值:若能找到,则返回该元素的下标,否则,抛出ValueError 异常

  1. >>> t = ['a', 'b', 'c']
  2. >>> t.index('b') # 找到了,返回下标
  3. 1
  4. >>> l.index('d') # 没找到,抛出 ValueError 异常
  5. Traceback (most recent call last):
  6. File "<stdin>", line 1, in <module>
  7. ValueError: 'd' is not in list

(完。)


推荐阅读:

Python 简明教程 --- 6,Python 控制流

Python 简明教程 --- 7,Python 字符串

Python 简明教程 --- 8,Python 字符串函数

Python 简明教程 --- 9,Python 编码

Python 简明教程 --- 10,Python 列表


欢迎关注作者公众号,获取更多技术干货。

Python 简明教程 --- 11,Python 元组的更多相关文章

  1. Python 简明教程 --- 13,Python 集合

    微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 如果代码和注释不一致,那很可能两者都错了. -- Norm Schryer 目录 前几节我们已经介绍 ...

  2. Python 简明教程 --- 14,Python 数据结构进阶

    微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 如果你发现特殊情况太多,那很可能是用错算法了. -- Carig Zerouni 目录 前几节我们介 ...

  3. Python 简明教程 --- 15,Python 函数

    微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 测试只能证明程序有错误,而不能证明程序没有错误. -- Edsger Dijkstra 目录 本节我 ...

  4. Python 简明教程 --- 16,Python 高阶函数

    微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 对于那些快速算法,我们总是可以拿一些速度差不多但是更容易理解的算法来替代它们. -- Douglas ...

  5. Python 简明教程 --- 12,Python 字典

    微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 代码写的越急,程序跑得越慢. -- Roy Carlson 目录 Python 字典是另一种非常实用 ...

  6. Python 简明教程 ---10,Python 列表

    微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 程序 = 算法 + 数据结构 -- Nicklaus Wirth 目录 从这句话程序 = 算法 + ...

  7. Python 简明教程 --- 26,Python 多进程编程

    微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 学编程最有效的方法是动手敲代码. 目录 1,什么是多进程 我们所写的Python 代码就是一个程序, ...

  8. 【笔记】Python简明教程

    Python简明教程,此资源位于http://woodpecker.org.cn/abyteofpython_cn/chinese/ s=u'中文字符' #u表示unicode,使用u之后能正常显示中 ...

  9. python简明教程

    Python简明教程 MachinePlay关注 0.7072018.09.26 01:49:43字数 2,805阅读 9,287 Python一小时快速入门 1.Python简介   pylogo. ...

随机推荐

  1. 使用RTL进行硬件模型编程的局限性

    https://mp.weixin.qq.com/s/Nj_d3hwgNX4kWVtKsqMSWg   ​​   硬件模型编程,即Hardware Model Programming.在RTL抽象级别 ...

  2. Second Space could let suspect play two different roles easily

    Have you guys heard about a pretty good feature called "Second Space"?  Manufacturers like ...

  3. Java实现 LeetCode 795 区间子数组个数 (暴力分析)

    795. 区间子数组个数 给定一个元素都是正整数的数组A ,正整数 L 以及 R (L <= R). 求连续.非空且其中最大元素满足大于等于L 小于等于R的子数组个数. 例如 : 输入: A = ...

  4. Java实现 LeetCode 508 出现次数最多的子树元素和

    508. 出现次数最多的子树元素和 给出二叉树的根,找出出现次数最多的子树元素和.一个结点的子树元素和定义为以该结点为根的二叉树上所有结点的元素之和(包括结点本身).然后求出出现次数最多的子树元素和. ...

  5. Java实现 蓝桥杯 算法提高 最大值路径

    试题 算法提高 最大值路径 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 刷微博,编程序.如下图所示,@北京发布 提出了如下"头脑震荡"问题.对此问题做一般化描 ...

  6. Java实现蓝桥杯历届试题填字母游戏

    题目描述 小明经常玩 LOL 游戏上瘾,一次他想挑战K大师,不料K大师说: "我们先来玩个空格填字母的游戏,要是你不能赢我,就再别玩LOL了". K大师在纸上画了一行n个格子,要小 ...

  7. Java实现DFS深度优先查找

    1 问题描述 深度优先查找(depth-first search,DFS)可以从任意顶点开始访问图的顶点,然后把该顶点标记为已访问.在每次迭代的时候,该算法紧接着处理与当前顶点邻接的未访问顶点.这个过 ...

  8. java实现哈密顿回路问题

    1 问题描述 什么是哈密顿回路? 引用自百度百科: 哈密顿图(哈密尔顿图)(英语:Hamiltonian path,或Traceable path)是一个无向图,由天文学家哈密顿提出,由指定的起点前往 ...

  9. sql server 连接种类

    一.连接种类 内连接 inner join 如果分步骤理解的话,内连接可以看做先对两个表进行了交叉连接后,再通过加上限制条件(SQL中通过关键字on)剔除不符合条件的行的子集,得到的结果就是内连接了. ...

  10. Linux的文件系统及文件缓存知识点整理

    Linux的文件系统 文件系统的特点 文件系统要有严格的组织形式,使得文件能够以块为单位进行存储. 文件系统中也要有索引区,用来方便查找一个文件分成的多个块都存放在了什么位置. 如果文件系统中有的文件 ...