之前,我们已经探讨过字符串的相关操作了(Python–字符串)。列表和字符串相同,他也是一种序列,所谓序列,就是按照一定顺序存储对象的容器,容器中的每个序列都被默认存在一个下标(索引)与之对应。从这个角度讲,列表当然和字符串在序列的性质方面是有相同之处的。不过他们的不同之处更多,比如在存储的方式上,存储对象的类型上等等。
列表也是一种序列
我们发现,列表在创建和访问上,满足和字符串类似的性质。
1. 列表的创建
和建立字符串一样,分为两种:直接赋值以及通过 list()
函数
alist = [1, 2, "we", [12.5, "how"]] # >>> 由四个元素构成的列表
alist = [] # >>> 空列表
alist = list("123") # >>> ["1", "2", "3"]
列表由中括号 “[ ]” 里面写入对象的形式表示,不同的对象之间由 “,” 隔开,当然,如果中括号内什么都没有,就表示创建了一个空列表。我们可以发现,Python中列表的一个显著特征是它里面可以存储任何类型的对象(整型,浮点型,字符串,甚至是列表自己等等),而不像字符串,只能存储字符。
另外,需要注意的是,使用 list()
函数时,传入的参数一定得是可迭代的,比如传入整数,浮点数,就一定会报错。
2. 列表的访问
两种方法:通过下标;通过切片
alist = [1, 2, 3, 4, 5]
alist[-1] # >>> 5
alist[0:2] # >>> [1, 2]
alist[0::2] # >>> [1, 3, 5]
alist[::-1] # >>> [5, 4, 3, 2, 1]
和字符串一样,索引的设置也是从0开始的,而且同样存在正索引和负索引。切片也一样是由三个3个参数构成[begin : end : step]
,具体的设置和字符串中是一模一样的,在此不赘述(参见:Python–字符串)
相关操作
我们已经知道字符串是不可变的,也就是说,我们所做的关于对字符串的更新操作,其实都是通过新建一个新的字符串对象实现的。但是列表则方便的多,他是可变的,你可以随时添加、删除、修改列表中的元素。再加上我们上面谈到的列表可以存储任意类型的对象,那么,其实可以想象,列表为我们提供的这种非常便捷的数据存储结构,一定会大大简化程序的编写。
1. 添加
append()
函数可以实现直接向列表的末尾添加元素,而且语法非常简单。
alist = []
alist.append(1) # >>> alist = [1]
alist.append("we") # >>> alist = [1, "we"]
注意,此时就是列表alist本身改变了,而不是新建了另一个列表,这一点和字符串有着本质区别。
2. 插入
append()
函数只能在列表的末尾添加元素,而有时,我们需要在一些特定的位置插入元素,这就需要用到 insert()
函数。
alist = ["I", "Python"]
alist.insert(1, "wrote") # 在位置1处插入字符串对象 "wrote"
print(alist) # >>> ["I", "wrote", "Python"]
insert()
函数的结构时这样的:insert(index, obj)
. 第一个参数表示要插入的位置,第二个参数表示要插入的元素
3. 删除
两种删除方法:remove(obj)
和 pop(index)
从两个函数的参数就可以看出使用场景的不同。如果我们已知要删除对象本身的值,则使用 remove(obj)
直接删除,而如果知道要删除对象的位置,则使用 pop(index)
根据索引删除元素