python支持一种数据结构的基本概念,即容器(container)。容器基本上就是包含其他对象的对象。两种主要的容器就是序列(如列表和元组)与映射(如字典)。在序列中,每个元素都有编号,这个编号我们也可以称之为索引,从0开始递增。而在映射中,每个元素都有名称(也叫做键)。
列表(List)
列表的特点就是可以修改,而且列表里面啥都能装,其中的元素是有序的。
如上图所示,列表的操作支持索引、切片,还有可以根据步长来输出特定的元素。另外需要注意的是列表是利用[ ]表示的。在切片访问的时候,其索引值是“左闭右开”的,而且支持负值索引的访问。其中索引值-1代表最后一位。
列表的大小和内容可以随意改变,在插入、删除、修改元素时,不需要建立一份新的列表拷贝,而是在原来的内存地址上直接修改。
对于添加元素的三个函数,append方法只能在尾部加入;insert方法可以在任意位置加入,如果指定的索引值大于序列的总长度,则自动加到末尾;extend方法则可以在尾部一次性加入多个元素。
对于删除来说,pop是删除末端的一个元素,其实就是出栈;而remove函数是删除指定的一个值,注意它一次也只能删除一个;还有一个内置方法del,可以一次性删除所有的元素,也可以按照切片的方法删除指定的元素。
这些方法都是不返回任何值的,它们都是就地修改,返回值是None。所以你看到上 面的示例,没有任何值。
元组(tuple)
元组就是不可变的列表。注意它的定义是( )。
元组的创建很简单,只要几个逗号分割数值,就是一个元组了。而如果只有一个值时,只要有逗号,也是元组,而且就算只有一个值,在后面也必须有逗号。
函数format就是通过{}和:代替以前的%,增强了字符串格式化的功能。
字典
字典和列表完全不同,字典里的对象是无序的,他是通过一对对的键和值来反映一种映射关系。字典里,每个键都是唯一的,我们可以通过键来存取对应的值,而不能像列表那样通过位置来索引。
字典的生成有以下几种,1、初始为空字典,动态填充新的键和值;2、用列表动态生成;3、用键值对元组组成的列表构造字典。如下图所示,其中第4个例子是合并两个字典。需要注意的是,如果两个字典中有冲突的键,那么会无规律的进行覆盖,所以应该避免这种情况。
在字典(以及其他映射类型)中,键必须是独一无二的,而字典中的值无需如此。
分别读取字典的键、值和键值对的方法。
字典的对象是无序的,字典的排序是对键值进行排序,它会返回一个排好序的键的列表。