文章目录
列表和元组
数据结构
通过某种方式组织在一起的数据元素及其关系的集合
序列
序列中的每个元素被分配一个序号,即为元素位置,称为索引(index);可以使用正向n和倒向-n进行索引
2.1 序列概览
类型
python包括6种内建序列:列表(list) 元组(tuple) 字符串(str) unicode字符串 buffer对象 xrange对象
关于list和tuple的一些注意
list可以修改,tuple则不能 出于某种原因(技术,内部运作)很多内建元素返回元组 字典的键必须是元组
嵌套
序列可以包含序列
容器
Python还有容器(container),基本上是包含其他对象的任意对象.序列和映射(如字典)是两种主要的容器.映射的每个内容有自己的名字,称为键.集合不属于序列.
2.2 通用序列操作
索引
通过下标访问元素和修改元素,如:
1 2 3 4 |
>>> greeting[1] '1' >>> greeting[1]=0 |
分片
通过编号访问一定范围内的元素,通过冒号隔开两个索引来实现:
1 2 3 4 5 6 7 8 9 10 11 |
>>> tag[9:20] #类似c++的迭代器指针,包含首元素,不包含末元素 >>> tag[-3:-1] #倒数访问 >>> numbers[-3:] #前者留空,从零开始;后者留空,尾后指针 >>> numbers[:] #返回整个序列 >>> numbers[::step] #最后一项指定步长,若为负数,则为倒序排列 |
序列相加
基本上.同类型的序列可以用加号进行连接
乘法
用数字乘以一个序列,返回将原序列重复这个数字次的新的序列
成员资格
使用in运算符可以检查一个值是否在序列中,并返回结果的布尔值
这种方法,早期版本只能检查单个元素在序列中是否存在,若检查子序列之于序列,则引发TypeError
长度,最大值,最小值
顾名思义.值得注意的是,max和min函数会将输入的对象隐式转换为多个数字
2.3 列表:python的苦力
1 2 3 4 |
class list(object): list()->new empty list list(iterable)->new list initialized from iterable items |
列表转字符串
1 2 |
>>> ''.join(somelist) |
可以将字符列表转化为字符串
2.3.2 基本的列表操作
元素赋值
为开辟了内存的元素赋值
删除元素
1 2 |
del(lst[index]) |
分片赋值
- 可以用与原序列不等长的序列赋值
- 可以插入新元素:
1 2 |
>>> lst[x:x]=a |
- 可以删除元素
1 2 |
>>> lst[a:b]=[] |
2.3.3 列表方法
追加新对象
1 2 |
>>> lst.append(obj) |
元素计数
1 2 |
>>> lst.count(value) |
末尾追加新对象们
1 2 3 4 5 |
>>> lst.extend(iterable) #原地操作,无返回值 >>> extend(obj1,iterable) #修改被拓展序列,返回全新序列 |
索引方法
1 2 |
>>> lst.index(value[,start[,stop]]) |
搜值返回下标,未找到引发ValueError
插入方法
1 2 |
>>> lst.insert(index,value) |
用于将对象插入列表中,可用分片赋值实现
弹出栈方法
1 2 |
>>> lst.pop(index=-1) |
搜索移除方法
1 2 |
>>> lst.remove(value[,start[,stop]]) |
操作首个匹配项
反向方法
1 2 3 4 5 |
>>> lst.reverse() # 序列元素反向存放,原地操作无返回值 >>> reversed(lst) # 修改返回 |
排序操作
1 2 3 |
>>> lst.sort(key=None,reverse=False) >>> sorted(iterable,key=None,reverse=False) |
- 前者原地无返回,后者修改有返回
- key为比较函数
- reverse决定是否反向
2.4 元组:不可变序列
一些注意
- 元组是不可修改的序列
- 如果运用逗号分隔一些值,则自动创建元组
- 大部分时候,元组用括号括起来
- 空元组()
- 单元素元组(a,)
1 2 3 4 |
class tuple(object): tuple()->empty tuple tuple(iterable)->tuple initialized from iterable's items |
2.4.2 基本元组操作
可怜,只有创建和访问;基本没别的了