1、Python-列表和元组
接触python有一段时间了,在读书期间接触了好几门语言,但每门都感觉自己是个门外汉,都不精通,工作中总觉得自己的基础自己不牢靠。现在开始将自己学到的知识总结罗列出来,理一理自己的思路,也希望能够和学习python的同学相互交流,共同进步。
1、数据结构是将数据元素以某种方式组织在一起的数据集合,这些数据元素既可以是数字、字符,也可以是其他类型的数据结构。在python中最基本的数据结构是序列sequence,序列中的每个元素都有一个位置信息与其对应,称这个位置信息为索引。python中最常用的序列为列表和元组,其他的类型还有字符串、Unicode字符串、buffer对象和xrange对象。列表和元组的主要区别是,列表可以修改,元组不可以修改。
2、序列中的元素可以是任意类型,序列中可以包含其他序列。
1 >>> test = [23, 'apple', ['banana', 'hello world']] 2 >>> test 3 [23, 'apple', ['banana', 'hello world']]
3、通用序列操作:索引indexing、分片sliceing、加adding、乘multiplying等
3.1 索引
序列中的元素都是有编号的,从0开始递增。
字符串可以看做是字符组成的序列,注意:最后一个元素的编号是-1。
可以直接对返回结果为序列的函数调用直接进行索引。
1 >>> test = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 2 >>> test[3] 3 3
3.2 分片
分片操作来返回一定范围内的元素,他由两个索引来做为自己的边界,第1个元素是包含在片内的,第2个元素则不包含在分片内。
1 >>> test = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 2 >>> test[3: 7] 3 [3, 4, 5, 6] 4 >>> test[0: -1] 5 [0, 1, 2, 3, 4, 5, 6, 7, 8] 6 >>> test[-3: 0] 7 [] 8 >>> test[-3: 7] 9 [] 10 >>> test[-3: 9] 11 [7, 8] 12 >>> test[0: ] 13 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 14 >>> test[: 2] 15 [0, 1] 16 >>> test[:] 17 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
注意:只要分片中最左边的索引比最右边的索引晚出现在序列中,输出结果就是一个空序列。
分片操作在默认情况下的步长为1,成为隐身设置。我们可以显示第设置分片的步长,当步长为负数时,序列从右向左提取数据。
>>> test[: : 2] [0, 2, 4, 6, 8] >>> test[0: 10: 2] [0, 2, 4, 6, 8] >>> test[10: 0: -2] [9, 7, 5, 3, 1]
注意:分片开始点的元素包括在序列当中,结束点的元素不包括在序列当中。
3.3 序列相加
注意:列表和字符串是不能够连接在一起的。
1 >>> [1, 2, 3] + [3, 4, 5] 2 [1, 2, 3, 3, 4, 5] 3 >>> 'Hello' + 'World!' 4 'HelloWorld!'
3.4 乘法
1 >>> 'Hello World!' * 5 2 'Hello World!Hello World!Hello World!Hello World!Hello World!' 3 >>> [1, 2] * 5 4 [1, 2, 1, 2, 1, 2, 1, 2, 1, 2]
3.5 成员资格
使用in运算符检查一个值是否在序列中。
1 >>> test = 'hello' 2 >>> 'h' in test 3 True 4 >>> 'llo' in test 5 True 6 >>> number = ['one', 'two', 'three'] 7 >>> 'one' in number 8 True
3.6 长度,最大值,最小值
1 >>> number = ['one', 'two', 'three', 'four'] 2 >>> min(number) 3 'four' 4 >>> max(number) 5 'two' 6 >>> len(number) 7 4
4 列表的操作和方法
4.1 list函数
可以将任何的序列转化成列表,使用jion()函数能够让其转换回来。
1 >>> list('Hello') 2 ['H', 'e', 'l', 'l', 'o'] 3 >>> ''.join(['H', 'e', 'l', 'l', 'o']) 4 'Hello'
4.2 基本列表操作
元素赋值、删除元素、分片赋值
1 >>> x = [1, 1, 1] 2 >>> x[1] = 2 3 >>> x 4 [1, 2, 1] 5 >>> del x[1] 6 >>> x 7 [1, 1] 8 >>> x[1:1] = [2, 3, 4] 9 >>> x 10 [1, 2, 3, 4, 1] 11 >>> x[1: ] = [5, 6] 12 >>> x 13 [1, 5, 6]
14 >>> x[:] = []
15 >>> x
16 []
注意:在分片赋值时可以使用与原序列不等长序列将分片替换。
4.3 列表方法
方法是一个与某些对象有紧密联系的函数,对象可能是列表、数字。
4.3.1 append方法:在列表末尾追加新对象。
4.3.2 count方法:统计某个元素在列表中出现的次数。
4.3.3 extend方法:在列表的末尾一次性追加另一个序列中的多个值。
4.3.4 index方法:从列表中获取某个对象第一个匹配项的索引位置。
4.3.5 insert方法:将对象插入到列表中。
4.3.6 pop方法:移除列表中的一个元素(默认情况是最后一个),并且返回该元素的值。
数据结构栈中的入栈和出栈操作可以有pop和append方法来代替,从而实现python对栈的支持。
4.3.7 remove方法:移除列表中某个值的第一次匹配。
4.3.8 reverse方法:将列表中的元素反向存储。
4.3.9 sort方法:用于在原位置对列表进行排序,“原位置排序”意味着改变原来的列表。
4.4 元组:不可变序列
创建元组
1 >>> 1,2,3 2 (1, 2, 3)
空元组
1 >>> () 2 ()
一个值的元组
1 >>> 2, 2 (2,) 3 >>> (2,) 4 (2,) 5 >>> (2) 6 2
tuple函数:以一个序列做为参数,并将其转化为元组。
1 >>> tuple([1,2,3]) 2 (1, 2, 3) 3 >>> tuple('abc') 4 ('a', 'b', 'c') 5 >>> tuple((1,2,3)) 6 (1, 2, 3)
注意:元组只支持创建和访问。
元组存在的意义:1,元组可以在映射中当做键使用,而列表不可以;2,元组作为很多内建函数和方法的返回值存在,此时必须对元组进行处理。