本文章主要结合前面所学的知识点来介绍Python数据结构
1.列表
Python中列表是可变的,这是区别于字符串和元组的最重要的特点,一句话概括即:列表可以修改,而字符串和元组不能。以下是Python列表的方法:
下面实例演示了列表的大部分方法:
注:类似insert,remove或sort等修改列表的方法没有返回值
将列表当作堆栈使用
列表方法使得列表可以很方便的作为一个堆栈来使用,堆栈作为特定的数据结构,最先进入的元素最后一个被释放(后进先出),用append()方法可以把一个元素添加到堆栈顶,用不指定索引的pop()方法可以把一个元素从堆栈顶释放出来,例如:
将列表当作队列使用
也可以把列表当作队列用,只是在队列里第一加入的元素,第一个取出来;但是拿列表用作这样的目的效率不高。在列表的最后添加或者弹出速度块,然而在列表里插入或者从头部弹出速度却不快,因为所有其他的元素都得一个一个移动
列表推导式
列表推导式提供了从序列创建列表的简单途径。通常应用程序将一些操作应用于某个序列的每个元素,用其获得的结果作为生成新列表的元素,或者根据确定的判定条件创建子序列
每个列表推导式都在for之后跟一个表达式,然后有0到多个for或if子句,返回结果是一个根据表达从其后的for和if上下文环境中生成出来的列表。如果希望表达式推导出一个元组,就必须使用括号。
如下例:
整点花的:
这里对序列里每个元素逐个调用某方法:
也可以用if子句作为过滤器,生成的也是新列表:
以下是一些关于循环和其他技巧的演示:
列表推导式可以使用复杂表达式或嵌套函数:
嵌套列表解析
Python的列表也可以嵌套
以下实例展示了3*4的矩阵列表:
以下实例将3*4的矩阵列表转换为4*3列表:
也可以使用以下方法来实现
另外一种实现方法:
del语句
使用del语句可以从一个列表中根据索引来删除一个元素,而不是值来删除元素,这与使用pop()返回一个值不同,可以用del语句从列表中删除一个切割,或者清空整个列表,例如:
也可以用del删除实体变量:
即del a
元组和序列
元组由若干逗号分隔的值组成,例如:
可见元组的输出总是有括号的,以便于正确表达嵌套结构,在输入时可能有或没有括号,不过括号通常是必须的(如果元组是更大的表达式的一部分)
集合
集合是一个无序不重复元素的集,基本功能包括关系测试和消除重复元素
可以用大括号{}来创建集合,注意如果要创建一个空集合必须用set()而不是{},因为后者创建的是一个空字典
以下为一个简单的演示:
集合也支持推导式:
字典
该数据结构序列是以连续的整数为索引,与此不同的是,字典以关键字为索引,关键字可以是任意不可变类型,通常用字符串或数值
理解字典的最佳方式是把它看作无序的键=>值对集合
在同一个字典之内,关键字必须是互不相同
一对大括号创建一个空的字典:{}
简单运用字典的例子:
构造函数dict()直接从键值对元组列表中构建字典,如果有固定的模式,列表推导式指定特定的键值对:
此外,字典推到可以用来创建任意键和值的表达式词典:
如果关键字只是简单的字符串,使用关键字参数指定键值对会更方便:
遍历技巧
在字典中遍历时,关键字和对应的值可以使用items()方法同时解读出来:
在序列中遍历时,索引位置和对应值可以使用enumerate()函数同时得到:
同时遍历两个或更多的序列,可以使用zip()组合:
要反向遍历一个序列,首先指定这个序列,然后调用reversed()函数:
要按顺序遍历一个序列,使用sorted()函数返回一个已排序的序列,并不修改原值: