目录
2.4 元组:不可变序列
元祖与列表一样,也是一种序列。唯一不同的是元组不能修改。(而且,元组没有像列表一样的方法)创建元组的语法很简单:如果你用逗号分隔了一些值,那就自动创建了元组。
>>> 1,2,3
(1, 2, 3)
元组也是(大部分时候是)通过圆括号括起来的:
>>> (1,2,3)
(1, 2, 3)
空元祖可以用没有包含内容的两个圆括号来表示
>>> ()
()
那么实现包括一个值的元组:必须加个逗号,即使只有一个值 :
>>> 42 #不是元组
42
>>> 42, #长度为1的元组
(42,)
>>> (42,) #长度为1的元组
(42,)
Ps:逗号是很重要的,只添加圆括号也是没用的:(42)和42是完全一样的。
>>> 3*(40+2)
126
>>> 3*(40+2,) #注意是逗号,一点. 时返回126.0
(42, 42, 42)
2.4.1 tuple函数
tuple函数的功能与list函数基本上是一样的:以一个序列作为参数并把它转为元组(tuple并不是真正的函数,而是一种类型。)如果参数就是元组,那么该参数就会被原样返回。
>>> tuple([1,2,3]) #列表转为元组
(1, 2, 3)
>>> tuple('abc') #字符串转为元组
('a', 'b', 'c')
>>> tuple((1,2,3)) #原样返回
(1, 2, 3)
2.4.2 基本元组操作
元组其实并不复杂---除了创建元组和访问元组元素之外,也没有太多其他操作,可以参照其他类型的序列来实现。
>>> x = [1,2,3]
>>> x[1]
2
>>> x[0:2]
[1, 2]
>>> x = (1,2,3) #参照上面的列表对元组操作这个位置可以不加();逗号也是表示元组
>>> x[1]
2
>>> x[0:2]
(1, 2)
Ps:元组的分片还是元组,就像列表的分片还是列表一样。
2.4.3 那么,意义何在
到底有谁会需要想元组那样不可变序列呢?难道不能在不改变其中内容的时候坚持只用列表吗?一般来说是可行的。但是由于以下两个重要原因,元组是不可替代的。
(1)元组可以在映射(和集合的成员)中当做键使用---而列表不行(我理解的应该是类似于数据库中的主键key不可修改,更多映射的内容看第4章)
(2)元组作为很多内建函数和方法的返回值存在,也就是说你必须对元组进行处理。只要不尝试修改元组,那么“处理”元组在绝大多数情况下就是把他们当做列表来进行操作,(除非需要使用一些元组没有的方法,例如index和count)
一般来说,列表可能更能满足对序列的所有要求。
2.5 小结
序列:序列是一种数据结构,它包含的元素都进行了编号(从0开始)。典型的序列包括列表、字符串和元组。其中,列表是可变的(可修改),而元组和字符串是不可变的。通过分片操作可以访问序列的一部分,其中分片需要两个索引号来指出分片的起始和结束位置。要想改变列表,则要对相应的位置进行赋值,或者使用赋值语句重写整个分片。
成员资格:in操作符可以检查一个值是否存在于序列(或其他容器)中,对字符串使用in操作符是一个特列,他可以查找子字符串。('x' in permissions)
方法:一些内建类型(例如列表和字符串,元组则不在其中)具有很多有用的方法。这些方法有些像函数,不过他们与特定值联系得更密切。方法是面向对象编程的一个重要的概念(第7章会讨论)
另外自己总结一下学到的,加强印象:删除元素del names[2];
以及列表方法:append、count、extend(连接)、index(找匹配值第一个索引位置)、insert、pop(移除列表中一个元素,有返回值)、remove(移除第一个匹配项)、reverse(反向存放、reversed返回一个迭代器对象reversed(x) )、sort(sorted返回一个列表)、高级排序(cmp、key=len、reverse=True 三个都是参数)
tuple函数返回元组、list函数返回列表
2.5.1 本章的新函数
函数 | 描述 |
cmp(x,y) | 比较两个值x>y返回正数,<返回负数,=返回0 |
len(seq) | 返回序列的长度 |
list(seq) | 把序列转换为列表 |
max(args) | 返回序列或者参数集合中的最大值:x = [1,[3,4],8]返回[3,4] |
min(args) | 返回序列或者参数集合中的最小值:x = [4,[1,2],8]返回4 |
reversed(seq) | 对序列进行反向迭代 |
sorted(seq) | 返回已排序的包含seq所有元素的列表 |
tuple(seq) | 把序列转换成元组 |
试了下max关于序列的使用
>>> max((1,2,3,4),(5,6,7,8))
(5, 6, 7, 8)
>>> max((1,2,3,4),(5,6,7,8),(9,10))
(9, 10)
>>> max((1,2,9,10),(1,2,7,8))
(1, 2, 9, 10)
>>> max('asad','dadafa')
'dadafa'
2.5.2 接下来学什么
下一章介绍由字符组成的序列,即字符串