List (列表)是 Python 内置的一种数据类型。 它是一种有序的集合,可以随时添加和删除其中的元素。
一. list 基本特性
**
- 它是一个队列,一个有序的队列/集合,是用中括号 [ ] 括起来的数据;
- 元素,列表括号内的每一个个体叫元素,若干元素组成列表list,元素间用逗号分割;
- 元素可以是任意对象,如数字,字符串,对象,列表等;
- list 中的元素是有顺序的,可以使用索引;
- list 是线性的数据结构;
- list 是可变的;
1. list 初始化(定义)
【实例1】定义一个列表 lst 的四种方法
lst = list() #定义了一个空列表
lst = []
lst = [2, 4, 'abc', [2, 3, 1]]
lst = list(range(5))
列表不能在定义时声明大小。
2. list 索引访问
索引,即下标
- 正索引:从左到右,从 0 开始
- 负索引:从右到左,从 -1 开始
- 正负索引,不可超界;list 默认从左到右,左边为头部/下界,右边为尾部/上界
list 通过索引访问元素
list[index]
二. list 常用方法
1. list 查询
- 查索引
list.index(value, [, start[, end]])
说明:
- 功能:index() 函数用于从列表中在指定区间内找出某个值第一个匹配项的索引位置。
- 返回值:返回一个数值(索引值);没有找到则抛出异常。
统计次数
list.count(obj)
说明:
- 功能:count() 方法用于统计某个元素在列表中出现的次数。
- 返回值:返回一个数值。
时间复杂度
index() 和 count() 方法的复杂度都是O(n),随着列表数据规模的增大,效率下降
- list 元素个数 ```python count = len(lst)
除list,其他序列对象也有 len(obj)
<a name="RjxqB"></a>
#### 2. list 修改
---
修改列表元素,通过索引访问修改元素完成。
```python
list[index] = value
注意:索引不要超界。
实例
lst = [1, ‘x’, 3] lst.append(‘abc’)
说明:
1. 功能:列表尾部追加元素;
1. 返回值:返回 None,就是说没有生成新列表,属于就地修改
1. 时间复杂度:O(1)
- 插入元素 - insert(index, obj)
```python
# 语法
list.insert(index, obj) -> None
# 实例
lst = [1, 'x', 3]
lst.insert(0, 'abc')
说明:
- 功能:在指定的 index 位置插入元素 obj
- 返回值:就地修改,返回 None
- 时间复杂度:O(1)
- 索引可以超界,超越上界,尾部追加;超越下界,头部追加
实例
lst = [1, ‘x’, 3] new_lst = [‘a’, ‘b’, ‘c’] lst.extend(new_lst)
说明:
1. 功能:将可迭代对象的元素追加到列表中
1. 返回值:就地修改,返回 None
- 连接/重复元素 - +/*
```python
# 语法
list_1 + list_2 -> list
list_3 * n -> list
# 实例
lst_1 = [1, 2, 3]
lst_2 = ['a', 'b', 'c']
lst_3 = [4, 'x', 5, 'y']
lst_12 = lst_1 + lst_2 # lst_12 = [1, 2, 3, 'a', 'b', 'c']
lst_3n = lst_3 * 2 # lst_3n = [4, 'x', 5, 'y', 4, 'x', 5, 'y']
说明:
- 功能:+,连接操作,将两个列表连接起来; *,重复操作,将列表元素重复n次
- 返回值:返回新 list
3. list 删除
实例
lst.remove(3)
说明:
1. 功能:从左到右查找第一个匹配 value 的值,然后移除该元素
1. 返回值:就地修改,返回 None
1. 时间复杂度:?
- 删除元素(弹出元素)- pop([index])
```python
# 语法
list.pop([index]) -> item
# 实例
lst.pop() # 弹出最后一个
lst.pop(1) # 弹出list索引为 1 的值
说明:
- 功能:默认弹出list最后一个元素;当指定index时,弹出索引处弹出那个元素(索引超界抛出异常)
- 返回值:返回 item 元素值
- 时间复杂度:?
- 清空元素 - clear( )
说明:# 语法
list.clear() -> None
- 功能:清除 list 中所有元素,剩下一个空列表
4. list 复制
实例
lst = [1, [2, 3, 4], 5] lst_1 = lst.copy()
说明:
1. 功能:影子拷贝,复制列表
1. 返回值:返回新列表
1. 注意:原列表中有引用类型时,只会复制引用,不会复制引用的对象,像下图里看到的
![image.png](https://cdn.nlark.com/yuque/0/2020/png/788815/1586414784768-ca023f8e-9b57-4c79-ad46-86cc8d5c445f.png#align=left&display=inline&height=344&margin=%5Bobject%20Object%5D&name=image.png&originHeight=344&originWidth=827&size=18544&status=done&style=none&width=827)<br />改变其中一个列表中的引用数据,另一个也会相应改变。
- 赋值拷贝
```python
# 实例
a = [1, [2, 3, 4], 5]
b = a
说明:
- 功能:赋值引用,其实就是对对象的引用,说白了就是一个别名。
- 注意:只要是引用,改变其中一个,另一个就会改变,如下
实例
import copy lst_2 = [1, [2, 3, 4], 5] lst_3 = copy.deepcopy(lst_2)
说明:<br />功能:copy 模块的 deepcopy 方法,完全拷贝父对象及其子对象,复制出来的是独立的,如下<br />返回值:返回新列表<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/788815/1586415910120-1304edeb-ee99-4664-bd3e-f06a99a0ee46.png#align=left&display=inline&height=256&margin=%5Bobject%20Object%5D&name=image.png&originHeight=256&originWidth=765&size=15055&status=done&style=none&width=765)
<a name="NAMf2"></a>
#### 5. list 排序、反转
---
- 元素排序 - sort()
```python
# 语法
list.sort(key=None, reverse=False) -> None
# 实例
alpha_list = ['a', 'aa', 'aaa']
alpha_list.sort() # 默认升序
alpha_list.sort(reverse=True) # 降序
alpha_list.sort(key=len, reverse=True) # 按元素长度比较后降序排列,这里用到内建函数len()
说明:
功能:对原列表元素排序,默认升序
参数:key, 一个函数参数,按指定key比较排序;reverse, 排序规则,reverse = True 降序 / False 升序(默认)
返回值:就地修改,返回 None
sort 与 sorted 区别:
- sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。
- list 的 sort 方法,它是对原列表进行操作,就地修改列表,无返回值;而内建函数 sorted 方法返回的是一个新的 list。
- 元素反转 - reversed()
说明:# 语法
list.reversed() -> None
功能:将列表元素反转
返回值:就地修改,返回 None
6. 随机数
随机数,即 random 模块。
- randint(a, b)
返回 [a, b] 之间的整数
- random.choice(seq)
从非空序列中随机挑选一个元素
- random.randrange([start,] stop [,step])
从指定范围内,按指定基数递增的集合中获取一个随机数。基数缺省值为 1。
- random.shuffle(list)
就地打乱列表元素,返沪 None。
7.其他方法
函数&方法 | 描述 |
---|---|
len(list) | 列表元素个数 |
max(list) | 返回列表元素最大值 |
min(list) | 返回列表元素最小值 |
list.extend(seq) | 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表) |
list.insert(index, obj) | 将对象插入列表 |
list.reverse() | 反向列表中元素 |
list.sort([func]) | 对原列表进行排序 |