Python在项目中的实战-列表
一、列表介绍
首先我们先创建一个列表,如下所示:
>>> new_list = [1, "test", [0], {"a": "a"}]
>>> new_list
[1, 'test', [0], {'a': 'a'}] 在python中,列表是由指定顺序排列的元素组成,是一种有序的集合,在实际工作中是一个比较常用的数据结构。python列表元素可以是不同类型的数据,保留了数组内存连续性访问的方式,每个节点存储指针而非实际数据,如下图所示:
由上图可知,列表中指针指向列表元素,列表元素通过列表索引获取,可以正向索引获取或fan
刚接触Python的同学对python列表可能会认为它跟C语言的数组一样,其实不然。下面我从以下几个维度介绍下python列表和C语言数组的区别
| 数据结构 | 长度 | 数据类型 | 空间效率 |
|---|---|---|---|
| Python列表 | 动态可变 | 数组中的元素可以是不同的类型 | 列表listPython的一个高级特性,是对源码中对象(PyListObject)的一个抽象,而因为不同的list存储元素的个数不同,PyListObject在创立时就被设置为变长对象。并且,该对象中还内置了像插入、删除等方法,可在运行时动调整维护列表内存和元素 |
| C语言数组 | 不可变 | 数组中的元素只能是同一种类型,在数组初始化时已经确定 | 创建数组时,需指定数据大小,预先按大小分配内存空间。即使只存储一个元素也要为所有元素预先分配内存,空间效率不高 |
二、元组
在Python数据结构中有一种类型和列表有点类似,那就是元组。元组和列表都是可以存储任何数据类型的序列,并且可以通过索引来访问。虽然类似,但也有不同,下面通过元组的以下介绍区别与列表的不同。
1、元组的创建
与列表不同的是,元组是用()定义。
>>> tup = ('C++', 'C#', 'python', 'java', 'go', 'lua')
>>> tup
('C++', 'C#', 'python', 'java', 'go', 'lua')2、元组元素获取
元组元素获取可通过索引获取
>>> tup = ('C++', 'C#', 'python', 'java', 'go', 'lua')
>>> tup
('C++', 'C#', 'python', 'java', 'go', 'lua')
>>> tup[0]
'C++'3、元组修改
元组是不能修改的,如果我们想列表那样修改元组元素,会有报错。
>>> tup = ('C++', 'C#', 'python', 'java', 'go', 'lua')
>>> tup[1] = "aa"
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment4、元组删除
元组内元素不但不能修改也不能删除,但是可以删除整个元组。
>>> tup = ('C++', 'C#', 'python', 'java', 'go', 'lua')
>>> del tup
>>> tup
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'tup' is not defined最后通过一个表格总结列表和元组的区别:
| 数据结构 | 语法 | 是否可变 | 占用空间 |
|---|---|---|---|
| 列表 | 使用[]来定义列表,如:[1,"a",[4] | 可变。如: >>> language = ["C++","C#","python","java","go","lua"] >>> language[0] = "a" >>> language ["a","C#","python","java","go","lua"] | 数据在创建的时候会为之后添加元素预留空间,所以保存相同元素个数时,数组占用空间大 |
| 元组 | 使用()来定义列表,如:(1,"a",[4]) | 不可变。如: >>> language = ("C++","C#","python","java","go","lua") >>> language[0] = "a" Traceback (most recent call last): File "<stdin>", line 1, in <module> \TypeError: 'tuple' object does not support item assignment</module></stdin> | 元组不可变,创建的时候大小固定,相同元素个数的情况下,占用空间比数据小 |
三、列表运算
在列表介绍中我们说到,列表是有序且是动态可变的,接下来我以列表language的一些运算验证这些说法。
1、列表获取与拼接
- 通过列表索引获取列表元素,从0开始,最后一个元素索引是-1。
>>> language ['C++', 'C#', 'python', 'java', 'go', 'lua'] >>> language[0] 'C++' >>> language[3] 'java' >>> language[-1] 'lua'
- 列表截取
>>> language = ["C++","C#","python","java","go","lua"] >>> language[1:] ['C#', 'python', 'java', 'go', 'lua'] >>> language[1:3] ['C#', 'python'] >>> language[:-3] ['C++', 'C#', 'python']
- 列表拼接
>>> a = [1, 2, 3] >>> b = [4, 5, 6] >>> a+b [1, 2, 3, 4, 5, 6]
2、列表插入
列表是有序且动态可变的,我们可以在列表任意位置插入元素。
>>> language = ["C++","C#","python","java","go","lua"] >>> language.insert(2,".net") >>> language ['C++', 'C#', '.net', 'python', 'java', 'go', 'lua']
3、列表添加
使用append实现列表元素添加,追加到列表最后。
>>> language = ["C++","C#","python","java","go","lua"]
>>> language.append("PHP")
>>> language
['C++', 'C#', 'python', 'java', 'go', 'lua', 'PHP'] 4、列表修改
修改列表元素,指定列表索引修改列表元素。
>>> language = ["C++","C#","python","java","go","lua"] >>> language[2] = "PHP" >>> language ['C++', 'C#', 'PHP', 'java', 'go', 'lua']
5、列表删除
删除列表元素的方法有以下三种:
- (1)、使用del语句删除,需知道元素索引
>>> language = ["C++","C#","python","java","go","lua"] >>> del language[2] >>> language ['C++', 'C#', 'java', 'go', 'lua']
- (2)、使用pop()方法删除,默认删除列表最后一个元素,也可指定索引删除
删除列表最后一个元素 >>> language = ["C++","C#","python","java","go","lua"] >>> language.pop() >>> language ['C++','C#','python','java','go']
删除列表指定索引元素 >>> language = ["C++","C#","python","java","go","lua"] >>> language.pop(1) 'C#' >>> language ['C++','python','java','go','lua']
- (3)、使用remove()方法删除,需知道元素值
>>> language = ["C++","C#","python","java","go","lua"] >>> language.remove("C#") >>> language ['C++', 'python', 'java', 'go', 'lua']ps:如果列表中有相同的元素,remove操作会从索引值最小的位置yigege删除
列表其他操作
- 获取列表长度
>>> language = ["C++","C#","python","java","go","lua"] >>> len(language) 6
- 列表元素复制
>>> test = ["test"] >>> test*4 ['test', 'test', 'test', 'test']
- 列表遍历
>>> language = ["C++","C#","python","java","go","lua"] >>> for l in language:print(l) ... C++ C# python java go lua
- 嵌套列表
>>> language = [["go", "C++", "python"],["JS", "html"]]
三、列表内置函数
| 函数 | 说明 | 举例 |
|---|---|---|
| len(list) | 获取列表元素个数 | >>> language = ["C++","C#","python","java","go","lua"] >>> len(language) 6 |
| max(list) | 获取列表中元素最大值 | >>> test = [1, 2, 3, 4] >>> max(test) 4 |
| min(list) | 获取列表中元素最小值 | >>> test = [1, 2, 3, 4] >>> min(test) 1 |
| list(seq) | 将元组类型转换成列表 | >>> test = (1, 2, 3, 4) >>> list(test) [1, 2, 3, 4] |
四、列表内置方法
| 方法 | 说明 | 举例 |
|---|---|---|
| list.append(obj) | 在列表末尾添加新元素 | >>>language = ["C++","C#","python","java","go","lua"] >>> language.append("go") >>> language ['C++', 'C#', 'python', 'java', 'go', 'lua', 'go'] |
| list.count(obj) | 统计某个元素在列表中出现次数 | >>>language = ["C++","C#","python","java","go","lua","go"] >>> language.count("go") 2 |
| list.extend(seq) | 扩展列表,在列表末尾一次性追加另一个列表的元素 | >>> language = ["C++","C#","python","java","go","lua"] >>> other = ["PHP", "JS"] >>> language.extend(other) >>> language ['C++', 'C#', 'python', 'java', 'go', 'lua', 'PHP', 'JS'] |
| list.index(obj) | 获取某个元素在列表中的索引位置 | >>> language = ['C++', 'C#', 'python', 'java', 'go', 'lua', 'PHP', 'JS'] >>> language.index("python") 2 |
| list.insert(index, obj) | 在列表指定索引位置添加元素 | >>> language = ["C++","C#","python","java","go","lua"] >>> language.insert(2,".net") >>> language ['C++', 'C#', '.net', 'python', 'java', 'go', 'lua'] |
| list.pop([index=-1]) | 移除列表中的一个元素,并返回该元素的值(默认最后一个元素) | >>> language = ["C++","C#","python","java","go","lua"] >>> language.pop(1) 'C#' >>> language ['C++','python','java','go','lua'] |
| list.remove(obj) | 删除列表中指定元素 | >>> language = ["C++","C#","python","java","go","lua"] >>> language.remove("C#") >>> language ['C++', 'python', 'java', 'go', 'lua'] |
| list.reverse() | 列表反向排序 | >>> language = ['C++', 'C#', 'python', 'java', 'go', 'lua', 'PHP', 'JS'] >>> language.reverse() >>> language ['JS', 'PHP', 'lua', 'go', 'java', 'python', 'C#', 'C++'] |
| list.sort( key=None, reverse=False) | 列表排序 | >>> language = ["C++","C#","python","java","go","lua"] >>> language.sort() >>> language ['C#', 'C++', 'go', 'java', 'lua', 'python'] |
| list.clear() | 列表清空 | >>> language = ["C++","C#","python","java","go","lua","go"] >>> language.clear() >>> language [] |
| list.copy() | 复制列表 | >>> language = ["C++","C#","python","java","go","lua","go"] >>> copy_language = language.copy() >>> copy_language ['C++', 'C#', 'python', 'java', 'go', 'lua', 'go'] |
