初认序列
序列python是最基本的数据结构
python有6种内建序列,列表、元组、字符串、unicode字符串、buffer字符串、xrange对象
列表可修改,元组、字符串不可修改,绝大部分情况下,列表可以替换元组,除非元组作为字典的键(键不可修改)
序列通用操作
1.索引(序列中元素的位置序号)
python索引是一个循环索引,第一个位置是0,从左往右递增;最右边位置索引也可以是-1
2.分片(提取序列的一部分)
分片指定了序列的一部分元素,提取时包含最左侧元素,不包含最右侧元素
分片步长是第三个参数,默认为1;指定为负数时,将从尾部往左提取,此时指定区间的前两个参数倒置
3.序列相加
同种序列可以通过'+'直接连接
4.乘法
原序列 * n,新序列将会重复n次
初始化列表举例:
sequence=[None]*10
ps:nan 意味着 not a number
5.成员资格
用in检查
6.长度、最大值、最小值
len()、max()、min()
列表
1.根据字符串创建列表:list函数
list('hello')
2.列表的基本操作
(1)元素赋值
x[1]=2
(2)删除元素:del语句(也可用于删除其他数据结构元素甚至变量)
del name[2]
(3)分片赋值(可实现:替换、插入、删除)
numbers[1:1]=[2,3,4] #在索引号为1的元素后方插入3个元素
numbers[1:]=[] #删除索引号为1元素的后面全部元素
3.列表方法
(1)append:列表末尾添加新对象
list.append(4)
(2)count:返回该元素在列表中出现次数
x.count([1,2])
(3)extend:在列表末尾添加新序列
a.extend(b)
原始的连接操作(a+b)会返回一个全新的列表,而extend仅仅修改a
原始连接操作比extend方法效率低
(4)index:从列表中找出某个值第一个匹配项的索引位置,找不到则返回异常
knights.index('who')
(5)insert:将对象插入到列表中
numbers.insert(3,'four')
insert和extend均可通过分片赋值实现
(6)pop:移除列表中一个元素(默认最后一个),并返回该元素
x.pop() #移除列表最后一个元素
x.pop(0) #移除列表第一个元素
(7)remove:移除列表中某个值的第一个匹配项
x.remove('be')
不存在该值时会产生错误
(8)reverse:将列表元素顺序倒置
x.reverse()
(9)sort:对列表排序
x.sort()
(10)sorted:返回已排序的列表副本
y=x.sort() #y为一个空值,错误做法
y=x.sorted() #返回x已经排序的副本,正确
(11)高级排序实现:sort函数有三个可选参数,cmp、key、reverse
(一)cmp为比较函数的默认实现方式,可以自定义
number.sort(cmp) #number将会递增排序
cmp(42,34) #此时该语句值为1,cmp本身也是一个函数,还可以返-1、0
(二)key是自定义为每个元素创建的键,每个元素根据键排序
x.sort(key=len) #x将根据元素长度排序
(三)reverse为简单的布尔型,为True或者False
x.sort(reverse=True) #为True时列表将反向排序
ps:复制列表应注意
x=[1,2,3,4,5]
y=x #仅仅是让y指向x(类似别名),两者还是同一个列表,共一块内存
元组
元组和字符串一样,是一种不可修改的序列。
1.创建:用逗号分隔一些值
1,2,3
(1,2,3)
1,
以上三个例子均能生成元组,元组用圆括号‘( )’表示,但是创建的时候重点是需要用逗号,只用圆括号没用
2.tuple()函数
类似list()函数,以一个序列为参数,返回该序列的元组形式
序列为字典时返回键组成的元组;序列为元组时返回自身
tuple([1,2,3])
3.元组基本操作
创建、访问(按索引访问、按切片访问,参考序列基本操作)
4.元组有列表不可替代的意义:
(1)元组在映射、集合的成员中当作键使用
(2)元组作为很多内联函数和方法的返回值(可以访问,不可以修改)