一、简介
数据结构是通过某种方式组织在一起的数据元素的集合。
序列是python中最基本的数据结构,python中包含6种内建的序列,分别是列表、元组、字符串、Unicode字符串、buffer对象和xrange对象。
二、使用
比如说现在想用一个列表存储用户的名称和年龄,可以在python中创建列表:
dotgua = ['dotgua', 24]
这里非常像是一个数组,不过这里可以看到列表中可以存放不同的数据类型。
通用序列操作
序列的基本操作包括:索引(indexing)、分片(slicing)、加(adding)、乘(multiplying)以及成员检查,以下都以列表为例
√ 索引
序列可以根据元素的编号访问--从0开始递增,例如:
>>> dotgua = ['dotgua', 24] >>> dotgua[0] 'dotgua'
索引也可以是负数,使用负数时python会从右边向左计数:
>>> dotgua[-1] 24
字符串本身也可以看做是列表:
>>> 'dotgua'[2] 't'
下面是一个示例程序,根据输入的年月日输出相应的日期的月份名称
#!/usr/bin/env python # 根据给定的年月日以数字形式打印出日期 months = [ 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December' ] # 以1~31的数字作为结尾的列表 endings = ['st', 'nd', 'rd'] + 17 * ['th'] + ['st', 'nd', 'rd'] + 7 * ['th'] + ['st'] year = input('Year: ') month = input('Month(1-12): ') day = input('Day(1-31): ') month_number = int(month) day_number = int(day) # 将月份和天数减1获得正确的索引 month_name = months[month_number-1] ordinal = day + endings[day_number-1] print(month_name + ' ' + ordinal + ', ' + year)
√ 分片
分片用来访问一定范围内的元素。通过冒号隔开的两个索引实现
>>> numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> numbers[2:4] [2, 3]
可以看到,第一个索引指定开始元素的索引,第二个则是最后一个元素的下一个位置的索引
分片也可以使用负数,负数即是从后向前计数
>>> numbers[-3:-1] [7, 8]
但是可以发现,这样没法取得最后一个元素,如果想取得最后一个元素,省略第二个索引即可
>>> numbers[-3:] [7, 8, 9]
同理,第一个索引也可以省略,即从第一个元素到第二个索引指定的元素
>>> numbers[:3] [0, 1, 2]
甚至,两个索引都可以省略,即获取整个列表,这在复制列表时比较有用
>>> numbers[:] [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
分片还可以设置步长:
>>> numbers[0:10:2] [0, 2, 4, 6, 8]
步长也可以为负数:
>>> numbers[10:0:-3] [9, 6, 3]
√ 序列相加
>>> [1, 2, 3] + [4, 5, 6] [1, 2, 3, 4, 5, 6]
√ 序列乘法
>>> 'python' * 5 'pythonpythonpythonpythonpython' >>> [4] * 10 [4, 4, 4, 4, 4, 4, 4, 4, 4, 4]
用None来初始化列表,None表示什么都没有
>>> seq = [None]*10 >>> seq [None, None, None, None, None, None, None, None, None, None]
√ 成员资格
检查一个元素是否在序列中可以使用in运算符
>>> 5 in numbers True
以下的示例模仿检查用户名密码是否正确:
database = [ ['dotgua', '1234'], ['dotdai', '4567'], ] username = input('User name: ') password = input('password: ') if [username, password] in database: print('Access granted') else: print('Not granted')
√ 长度、最大值和最小值
len()返回序列的长度
max()返回序列的最大值
min()返回序列的最小值
>>> len(numbers) 10 >>> max(numbers) 9 >>> min(numbers) 0
三、列表
1. list函数
list函数可以将字符串转化为单个字符的列表:
>>> list('dotgua') ['d', 'o', 't', 'g', 'u', 'a']
join可以执行相反操作:
''.join(['d', 'o', 't', 'g', 'u', 'a'])
2. 基本操作
元素赋值
根据索引即可修改
删除元素
使用del关键字删除某个位置的元素
>>> del numbers[2] >>> numbers [0, 1, 3, 4, 5, 6, 7, 8, 9]
分片赋值
分片操作可以一次赋值或添加多个元素
>>> numbers = [1, 2, 3] >>> numbers[3:] = [4, 5, 6] >>> numbers [1, 2, 3, 4, 5, 6]
也可以在添加元素的同时删除元素
>>> numbers = [1, 2, 3] >>> numbers[1:] = [4, 5, 6] >>> numbers [1, 4, 5, 6]
或者只删除元素
>>> numbers[1:] = [] >>> numbers [1]
3. 列表方法
append
追加新元素
count
统计某个元素出现的次数
extend
追加另一个序列
index
找到第一个匹配项的位置
insert
将元素插入到列表中
pop
移除列表中的一个元素(默认是最后一个)
remove