一、序列
数据结构:以某种方式(如通过编号)组合起来的数据元素(如数字、字符、其它数据结构等)集合。
在python中,最基本的数据结构是序列sequence,sequence中的每个元素都有编号,这个编号即是元素的位置或索引,其中第1个元素的索引为0,第2个元素的索引为1,依次类推;python也支持从末尾开始,用负数索引表示序列末尾元素的位置,最后一个元素的索引为-1,倒数第2个元素的索引为-2,依次类推。
python支持一种数据结构的基本概念,叫做容器container,container是可包含其它对象的对象;两种主要的container是sequence和map。
python内置了多种序列,包括列表、元组、字符串等。
通用序列操作
适用于所有序列的操作:索引、切片、相加、相乘、成员资格检查、长度、最大和最小元素。以列表演示通用序列操作:
索引:通过元素的索引获取对应的元素。 sequence[index]
1 s = 'hello' 2 print(s[-1]) # o 3 print(s[1]) # e 4 print(s[3]) # l
切片:通过两个索引指定切片的边界,索引之间使用冒号隔开,访问序列特定范围内的元素,适用于提取序列一部分。第1个索引所指向的元素包含在切片内,第2个索引所指向的元素不包含在切片内。 sequence[start:end:sep]
1 numbers = [1,2,3,4,5,6] 2 print(numbers[3:5]) # [4,5] 3 4 tag = '<a href="http://www.python.org">Python web site</a>' 5 print(tag[9:30]) # http://www.python.org 6 print(tag[32:-4]) # Python web site
切片开始于序列开头,则可省略第一个索引;切片结束于序列末尾,可省略第二个索引。复制整个序列,可将两个序列都省略
1 num = [1,2,3,4,5,6,7,8,9,10] 2 print(num[-3:]) # [8,9,10] 3 print(num[:3]) # [1,2,3]
4 print(num[:]) # [1,2,3,4,5,6,7,8,9,10]
执行切片操作时,显式或隐式的指定起点和终点,通常省略第3个参数步长。在普通切片中,步长默认为1,即从一个元素移到下一个元素,因此切片包含起点和终点之间的所有元素。
如果指定的步长大于1,将跳过一些元素。步长不能为0,否则无法向前移动,但可以为负数,即从右向左提取元素。
1 num = [1,2,3,4,5,6,7,8,9,10] 2 print(num[0::2]) # [1,3,5,7,9] 3 print(num[::4]) # [1,5,9] 4 print(num[8:3:-1]) # [9,8,7,6,5] 5 print(num[10:0:-2]) # [10,8,6,4,2]
切片示例:从类似于http://www.something.com的URL中提取域名
1 url = input('Please enter the URL:') 2 domain = url[11:-4] 3 print("Domain name:" + domain) 4 5 # Please enter the URL:http://www.python.com 6 # Domain name:python
相加:同类型的序列可通过加法运算符进行拼接。不同类型的序列不能相加
1 print([1,2,3] + [4,5,6]) 2 # [1,2,3,4,5,6] 3 4 print('hello,' + 'world') 5 # 'hello,world' 6 7 print([1,2,3] + 'world') 8 # TypeError: can only concatenate list (not "str") to list
相乘:将序列与一个数x相乘时,将重复这个序列x次来创建一个新序列。
1 print('python ' * 5) 2 # python python python python python 3 4 print([42] * 5) 5 # [42, 42, 42, 42, 42]
成员资格检查:要检查特定的值是否包含在序列中,可使用运算符in。检查是否满足指定的条件,并返回相应的值,满足时返回True,不满足时返回False。
1 # 可用于检查对文件的写入和执行权限 2 permissions = 'rw' 3 ret = 'w' in permissions 4 print(ret) # True 5 6 # 可用于检查用户是否包含在用户列表中 7 users = ['mlh','foo','bar'] 8 username = input('Enter your user name:') 9 ret = username in users 10 print(ret) 11 12 # 可用于垃圾邮件过滤器中 13 subject = '$$$ Get rich now!!! $$$' 14 ret = '$$$' in subject 15 print(ret)
python内置函数len返回序列包含的元素个数、min返回序列中最小元素、max返回序列中最大元素。
二、列表list
列表list:由一对方括号("[]")将元素包括起来的有序的数据集合,元素可以是不同的数据类型,如整数、字符串、嵌套列表等。
list是可变类型,可以随时添加修改删除其中的元素。
list内建功能
1 # 修改列表元素 2 L[index] = value 3 4 # 删除列表元素 5 del L[index] 6 7 # 在列表尾部追加一个对象 8 L.append(self,object) 9 10 # 统计对象在列表中出现的次数 11 L.count(self,value) 12 13 # 将一个可迭代对象添加到列表中,即扩展列表 14 L.extend(self,iterable) 15 16 # 获取指定范围内的元素所对应的索引,若不指定范围则默认为整个列表 17 L.index(self,value,start=None,end=None) 18 19 # 在指定索引处插入值,该索引原有的值向后移动 20 L.insert(self,index,object) 21 22 # 移除指定索引的元素并返回,不指定索引则默认移除最后一个元素 23 L.pop(self,index=None) 24 25 # 移除指定元素 26 L.remove(self,value) 27 28 # 反转列表 29 L.reverse(self) 30 31 # 列表排序,无返回值 32 # cmp:可选参数, 如果指定了该参数会使用该参数的方法进行排序 33 # key:主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。 34 # reverse:排序规则,reverse = True 降序, reverse = False 升序(默认) 35 L.sort(self,cmp=None,key=None,reverse=False)
二、元组
元组:由小括号将元素包括起来的元素集合。属于不可变类型。若元组中只有一个元素,则该元素之后要加上逗号。
元组内建功能
1 # 统计元素个数 2 T.count(self,value) 3 4 # 获取指定元素的索引位置 5 T.index(self,value,start=None,end=None)
浙公网安备 33010602011771号