python基础教程_学习笔记3:元组

元组

元组不能修改;(可能你已经注意到了:字符串也不能修改。)

创建元组的语法很简单:如果用逗号分隔了一些值,那么你就自动创建了元组。

>>> 1,3,‘ab‘

(1, 3, ‘ab‘)

元组也是(大部分时候是)通过圆括号括起来的。

>>> (1,3,‘13‘)

(1, 3, ‘13‘)

空元组可以用没有内容的两个圆括号来表示。

如何实现包括一个值的元组呢?

>>> (5)

5

>>> (‘ab‘)

‘ab‘

>>> ([5])

[5]

这样做满足不了需求。

实现方法有些奇特——必须加个逗号,即使只有一个值:

>>> (5,)

(5,)

>>> (‘ab‘,)

(‘ab‘,)

>>> ([5],)

([5],)

看来,上一节中存在的疑问部分提到的问题,我找到答案了。

其中,逗号是很重要的,只添加圆括号也是没用的:

>>> 3*(5+2)

21

>>> 3*(5+2,)

(7, 7, 7)

tuple函数

同list函数一样,一一个序列作为参数并把它转换为元组。如果参数就是元组,那么该参数就会被原样返回:

字符串

>>> tuple1=tuple(‘tuple‘)

>>> tuple1

(‘t‘, ‘u‘, ‘p‘, ‘l‘, ‘e‘)

列表

>>> tuple1=tuple([1234,‘abc‘])

>>> tuple1

(1234, ‘abc‘)

单字符字符串

>>> tuple1=tuple(‘1‘)

>>> tuple1

(‘1‘,)

单元素列表

>>> tuple1=tuple([1234])

>>> tuple1

(1234,)

元组

>>> tuple1=tuple((‘tup‘,‘le‘))

>>> tuple1

(‘tup‘, ‘le‘)

基本元组操作

元组并不复杂——除了创建元组和访问元组元素外,没用太多其它操作。可以参照其它类型的序列来实现。

元组的分片还是元组,就如同列表的分片还是列表一样。

元组的序列操作

创建元组:

>>> tuple1=tuple(‘today‘)

>>> tuple1

(‘t‘, ‘o‘, ‘d‘, ‘a‘, ‘y‘)

利用索引访问元素:

>>> tuple1[3]

‘a‘

分片获取元素

>>> tuple1[2:]

(‘d‘, ‘a‘, ‘y‘)

>>> tuple1[:3]

(‘t‘, ‘o‘, ‘d‘)

>>> tuple1[0:4:2]

(‘t‘, ‘d‘)

获取元组最大值、长度、最小值:

>>> max(tuple1)

‘y‘

>>> len(tuple1)

5

>>> min(tuple1)

‘a‘

赋值:

>>> tuple1[0]=‘d‘

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

TypeError: ‘tuple‘ object does not support item assignment

因为元组是不能被修改的,所以也就不能被赋值。

元组方法

>>> tuple1=tuple(‘method‘)

>>> tuple1

(‘m‘, ‘e‘, ‘t‘, ‘h‘, ‘o‘, ‘d‘)

上一节提到列表有九个方法,那么元组是否支持这些方法呢?

append

>>> tuple1.append(‘a‘)

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

AttributeError: ‘tuple‘ object has no attribute ‘append‘

count

>>> tuple1.count(‘a‘)

0

>>> tuple1.count(‘o‘)

1

extend

>>> tuple1.extend(‘a‘)

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

AttributeError: ‘tuple‘ object has no attribute ‘extend‘

index

>>> tuple1.index(‘o‘)

4

同列表一样,当指定的字符不存在时返回错误:

>>> tuple1.index(‘z‘)

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

ValueError: tuple.index(x): x not in list

insert

>>> tuple1.insert(2,‘ab‘)

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

AttributeError: ‘tuple‘ object has no attribute ‘insert‘

pop

>>> tuple1.pop()

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

AttributeError: ‘tuple‘ object has no attribute ‘pop‘

remove

>>> tuple1.remove(‘z‘)

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

AttributeError: ‘tuple‘ object has no attribute ‘remove‘

reverse

>>> tuple1.reverse()

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

AttributeError: ‘tuple‘ object has no attribute ‘reverse‘

sort

>>> tuple1.sort()

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

AttributeError: ‘tuple‘ object has no attribute ‘sort‘

通过上述方法的使用可知,凡是可以修改序列的方法元组均不支持,这也正和元组不能修改是一致的。

元组的重要性

有两个重要的原因,使得元组不可替代:

1)元组可以在映射中当做键使用,而列表则不行;

2)元组作为很多内建函数和方法的返回值存在;

一般来说,列表可能更能满足对序列的所有需求。

疑问解答

在列表小节中遇到了几个问题,以下解答一下:

1序列相乘后得到的序列类型不变,但单元素的元组进行乘法后得到的不是元组;

>>> (‘string‘)*5

‘stringstringstringstringstring‘

>>> (5)*5

25

解答:单元素元组应用逗号隔开。

>>> (‘string‘,)*5

(‘string‘, ‘string‘, ‘string‘, ‘string‘, ‘string‘)

>>> (5,)*5

(5, 5, 5, 5, 5)

2 对元组进行成员资格检查,得到的结果与预想不一致;

>>> (2,3,9) in (1,2,3,9,19)

False

解答:in是成员操作符,只有当左值是右值中的成员时才会返回True。以下是True的例子:

>>> (2,3,9) in (1,(2,3,9),19)

True

>>> (2,) in (1,(2,),19)

True

>>> 2 in (2,3,4)

True

python基础教程_学习笔记3:元组,布布扣,bubuko.com

时间: 2024-10-12 23:55:21

python基础教程_学习笔记3:元组的相关文章

python基础教程_学习笔记9:抽象

抽象 懒惰即美德. 抽象和结构 抽象可以节省大量工作,实际上它的作用还要更大,它是使得计算机程序可以让人读懂的关键. 创建函数 函数可以调用(可能包含参数,也就是放在圆括号中的值),它执行某种行为并且返回一个值.一般来说,内建的callable函数可以用来判断函数是否可调用: >>> import math >>> y=1 >>> x=math.sqrt >>> callable(x) True >>> callab

python基础教程_学习笔记10:异常

异常 什么是异常 Python用异常对象来表示异常情况.遇到错误后,会引发异常.如果异常对象并未被处理或捕捉,程序就会用所谓的回溯(Traceback,一种错误信息)终止执行: >>> 1/0 Traceback (most recent call last): File "<pyshell#0>", line 1, in <module> 1/0 ZeroDivisionError: integer division or modulo by

python基础教程_学习笔记6:字典

字典 映射(mapping),一种可通过名字引用值得数据结构. 字典是python中唯一内建的映射类型. 字典中的值没有特殊的顺序,但都存储在一个特定的键(key)里.键可以是数字.字符串甚至是元组. 字典的使用 某些情况下,字典比列表更加适用,比如: 表征游戏棋盘的状态,每个键都是由坐标值组成的元组: 存储文件修改数,用文件名作为键: 数字电话/地址簿: 假如有一个人名列表如下: >>>names=['Alice','Beth','Cecil','Dee-Dee','Earl'] 如果

python基础教程_学习笔记5:字符串

字符串 基本字符串操作 字符串也是序列,因此序列的基本操作(索引.分片.连接.乘法.长度.求最大值和最小值.成员资格)对字符串同样适用: 索引 >>> 'a_string'[0] 'a' 长度 >>> len('a_string') 8 求最大值 >>> max('a_string') 't' 求最小值 >>> min('a_string') '_' 乘法 >>> 'a_string'*2 'a_stringa_st

python基础教程_学习笔记17:标准库:一些最爱——time

标准库:一些最爱 time time模块所包含的函数能够实现以下功能: 获取当前时间.操作系统时间和日期.从字符串读取时间以及格式化时间为字符串. 日期可以用实数(从"新纪元"的1月1日0点开始计算到现在的秒数,新纪元是一个与平台相关的年份,对unix来说是1970年),或者是包含有9个整数的元组. 日期元组的字段含义 如元组: (2008,1,21,12,2,56,0,21,0) 表示2008年1月21日12时2分56秒,星期一,且是当年的第21天(无夏令时). 索引 字段 值 0

python基础教程_学习笔记2:序列-2

序列-2 通用序列操作 序列相加 通过加号对列表进行连接操作: 列表 >>> [1,3,4]+[2,5,8] [1, 3, 4, 2, 5, 8] 字符串 >>> '134'+'258' '134258' 元组 >>> (1,2,3)+(2,5,8) (1, 2, 3, 2, 5, 8) 元素数据类型不同的列表 >>> [[1,3],[3,9]]+[[2,2],'abc'] [[1, 3], [3, 9], [2, 2], 'abc'

python基础教程_学习笔记11:魔法方法、属性和迭代器

魔法方法.属性和迭代器 在python中,有的名称会在前面和后面各加上两个下划线,这种写法很特别.它表示名字有特殊含义,所以绝不要在自己的程序中使用这种名字.在python中,由这些名字组成的集合所包含的方法叫做魔法(或称特殊)方法.如果对象实现了这些方法中的某一个,那么这个方法会在特殊的情况下被python调用,而几乎没有直接调用它们的必要. 准备工作 为了确保类是新型的,应该把赋值语句__metaclass__=type放在你的模块的最开始,或者(直接或间接)子类化内建类(实际上是类型)ob

python基础教程_学习笔记7:条件、循环、其它语句

条件.循环.其它语句 print和import 随着更加深入地学习python,可能会出现这种感觉:有些自以为已经掌握的知识点,还隐藏着一些让人惊讶的特性. 使用逗号输出 打印多个表达式,只要将这些表达式用逗号隔开即可: >>> print "age:",28 age: 28 参数之间都插入了一个空格符. 如果在结尾加上逗号,那么接下来的语句会与前一条语句在同一行打印: print "Hello,", print "World!"

python基础教程_学习笔记:序列-1

序列 数据结构:通过某种方式组织在一起的数据元素的集合,这些数据元素可以是数字或者字符,甚至可以是其他数据结构. python中,最基本的数据结构是序列. 序列中的每个元素被分配一个序号--即元素的位置,也称为索引.第一个索引是0,第二个是1,以此类推. 序列概览 python包含6种内建的序列:列表.元组.字符串.Unicode字符串.buffer对象和xrange对象. 列表和元组的主要区别在于,列表可以修改,元组不能. 使用后者的理由通常是技术性的,它与python内部的运作方式有关.这也