一、序列

数据结构:以某种方式(如通过编号)组合起来的数据元素(如数字、字符、其它数据结构等)集合。

在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
slicing示例

相加:同类型的序列可通过加法运算符进行拼接。不同类型的序列不能相加

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)

 

posted on 2018-11-07 11:54  打破砂锅闻到底  阅读(75)  评论(0)    收藏  举报