标签:python
数据结构是通过某种方式组织在一起的数据元素的集合,这些数据元素可以是数字或者字符,甚至可以是其他数据结构。在python中最基本的数据结构是序列。序列中每一个元素被分配一个序号——即元素的位置,也称为索引。第一个元素的索引为0,第二个则是1,以此类推。
python包含6中内建序列,我们重点介绍的就是列表和元组。二者的区别是列表可以修改而元组不能修改。
通用序列操作,也就说我们要介绍的是针对序列的操作。所有的序列类型都可以进行某些特定的操作。这些操作包括:索引,分片,加,乘以及检查某个元素是否属于序列的成员。
1>索引
序列中的所有元素都是有编号的——从0开始递增。这些元素可以通过编号开始访问。如下:
>>> greeting="Hello" >>> greeting[0] ‘H‘
字符串就是一个由字符组成的序列。这就是一个索引,可以通过索引获取元素,所有序列都可以通过这种方式进行索引。使用负数进行索引时,python会从右边进行计数,最右边一个元素的索引为-1.
字符串的字面值可以直接进行索引,而不需要一个变量引用他们。
>>> ‘Hello‘[2] ‘l‘ >>> "Hello"[2] ‘l‘ >>> Hello[2] / 这样引用时字符串必须添加引号 Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name ‘Hello‘ is not defined
如果一个函数调用返回一个序列,那么可以直接对返回的结果进行索引操作。
>>> nian=raw_input("year: ")[3] year: 2016 >>> nian ‘6‘ >>>
2>分片
使用索引我们可以访问序列中的单个元素,但是使用分片我们可以访问序列中一定范围内的元素。分片通过冒号隔开两个索引来实现。
分片操作对于提取序列的一部分很有用的。而编号在这里显得尤为重要。第一个索引是要提取的第1个元素的编号,也就是要提取范围的开始端,第二索引也就是第二个元素的编号,也就是提取范围的结束端,但是分片中包含开始端,不包含结束端。
>>> numbers=[1, 2, 3, 4, 5, 6, 7, 8, 9] >>> numbers[3:7] /提取第四个元素到第7个元素之间的范围(4-8)但是不含8. [4, 5, 6, 7] >>> numbers[2:-1] /-1索引表示最后一个元素,但是不包含 [3, 4, 5, 6, 7, 8] >>>
假设我们需要访问最后三个元素:
>>> numbers[6:9] /索引6表示第7个元素,但是索引9表示第10个元素,这个元素并不存在,但是不包含在内。 [7, 8, 9] >>> >>> numbers[-3: ] /还可以这样,-3表示倒数第三个元素,一直到结尾。 [7, 8, 9] >>>
访问前三个元素:
>>> numbers[0:3] [1, 2, 3] >>> numbers[ :3] [1, 2, 3] >>>
复制整个序列:
>>> numbers[ : ] [1, 2, 3, 4, 5, 6, 7, 8, 9] >>>
如果在分片中,左边的元素比右边的元素晚出现在序列中,那么就会成为一个空序列。
>>> numbers[6:2] [] >>>
更大的步长。进行分片的时候,分片开始和结束的标志需要进行指定,而另一个参数——步长——通常都是隐式设定的。在普通的分片中步长是1,分片操作就是按照这个步长遍历整个序列元素的。
>>> numbers[0:5] [1, 2, 3, 4, 5] >>> numbers[0:5:2] [1, 3, 5] >>> numbers[5:0:-2] /步长也可以是负数,表示从右到左提取元素。 [6, 4, 2] >>>
3>序列相加
>>> [1, 2, 3] + [1, 5, 6] [1, 2, 3, 1, 5, 6] >>> "hello" + "world" ‘helloworld‘ >>> [1, 2, 3] + "world" Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: can only concatenate list (not "str") to list >>>
列表和字符串是无法连接在一起的,尽管他们都是序列。简单来说,两种相同类型的序列才能进行连接操作。
4>乘法
用数字乘以一个序列会生成新的序列,而在新的序列中,原来的序列会被重复n次。
>>> "python" * 5 ‘pythonpythonpythonpythonpython‘ >>> [34] *5 [34, 34, 34, 34, 34] >>>
空列表可以简单的用两个中括号([])来表示,但是若我们想要创建占用10个元素空间的序列,这里可以直接使用None。None是一个python内建值,它的确切含意是“这里什么也没有”。
>>> sequence=[None] *10 >>> sequence [None, None, None, None, None, None, None, None, None, None] >>>
检查一个值是否在序列中,可以使用in运算符,该运算符会返回一个值,结果为真返回True,否则返回false。
>>> numbers [1, 2, 3, 4, 5, 6, 7, 8, 9] >>> ‘3‘ in numbers /用单引号表示一个字符,所以返回假 False >>> 3 in numbers /数字表示返回真 True >>>
长度,最小值,最大值:
>>> len(numbers) 9 >>> max(numbers) 9 >>> min(numbers) 1 >>>
2.列表的方法:
字符串不能像列表一样被修改,所以有时根据字符串创建列表会很有用。
>>> n=list("hello") >>> n [‘h‘, ‘e‘, ‘l‘, ‘l‘, ‘o‘] >>>
list函数使用于所有类型的序列,而不只是字符串。
基本的列表操作:
1>改变列表的元素赋值:
>>> x=[1, 1, 1] >>> x [1, 1, 1] >>> x[1]=2 >>> x[2]=3 >>> x [1, 2, 3] >>>
2>删除元素可以使用del语句:
>>> del x[2] >>> x [1, 2] >>>
3>分片赋值:
>>> name=list("perl") >>> name [‘p‘, ‘e‘, ‘r‘, ‘l‘] >>> name[2: ]=list("Ar") >>> name [‘p‘, ‘e‘, ‘A‘, ‘r‘] >>>
使用分分片赋值时可以使用与原序列不等长的序列将分片代换。
>>> name [‘p‘, ‘e‘, ‘A‘, ‘r‘] >>> name[1: ]=list("ython") >>> name [‘p‘, ‘y‘, ‘t‘, ‘h‘, ‘o‘, ‘n‘] >>>
分片赋值还可以在不需要替换任何元素情况下插入新元素。
>>> numbers=[1, 5] >>> numbers[1:1]=[2, 3, 4] >>> numbers [1, 2, 3, 4, 5] >>>
这个程序只是替换了以空的分片,因此实际操作是插入了一个序列。若我们把分片内的元素替换为空,则就可以达到删除的目的。
>>> numbers [1, 2, 3, 4, 5] >>> numbers[1:3]=[] >>> numbers [1, 4, 5] >>>
3.列表的方法:
方法是一个与某些对象有紧密联系的函数,对象可能是列表,数字,也可能是字符串或者其他类型的对象。一般来说,方法可以这样调用。
对象.方法(参数)
append方法用于在列表末尾增加新的对象:
>>> lst=[1, 2, 3] >>> lst.append(4) >>> lst [1, 2, 3, 4] >>>
注意:使用append时,它不是简单的返回一个修改过的新列表——而是直接修改原来的列表。
count方法:统计某个元素在列表中出现的次数
>>> ["to", "be", "or", "not", "to", "be"].count(‘to‘) /字符一定要带上引号 2 >>> ["to", "be", "or", "not", "to", "be"].count("to") 2 >>> x=[[1,2],1,1] >>> x.count(1) 2 >>>
extemd方法:在列表末尾一次性追加另一个序列中的多个值。换句话说,可以用新列表扩展原有的列表:
>>> a=[1, 2, 3] >>> b=[4, 5, 6] >>> a.extend(b) >>> a [1, 2, 3, 4, 5, 6] >>>
extend方法:修改了被扩展的序列,而原始连接的操作则是返回一个全新的序列。
>>> b=[4, 5, 6] >>> a [1, 2, 3, 4, 5, 6] >>> a+b [1, 2, 3, 4, 5, 6, 4, 5, 6] >>> a [1, 2, 3, 4, 5, 6] >>> b [4, 5, 6] >>>
index方法。用于从列表中找出某个值第一匹配项的索引位置。
>>> n [‘a‘, ‘b‘, ‘c‘, ‘d‘, ‘a‘] >>> n.index("a") /注意如果是字符的话,一定要加引号。 0
本文出自 “自定义” 博客,谢绝转载!
标签:python
原文地址:http://zidingyi.blog.51cto.com/10735263/1770367