当前位置:
首页 > Python基础教程 >
-
Python内置数据类型list各方法的性能实例代码
在Python中,`list` 类型提供了多种内置方法来操作列表,比如添加、删除、搜索等。这些方法的性能因操作的不同而有所差异。下面,我将通过一些实例代码来展示`list`类型中一些常用方法的性能特性。
注意:性能评估通常涉及时间复杂度的概念,但直接通过代码示例来感知可能不够精确。对于更严格的性能评估,建议使用`timeit`模块来测量代码片段的执行时间。
### 1. 添加元素
- `append()` 方法在列表末尾添加一个元素,时间复杂度为 O(1)。
- `insert(i, x)` 方法在指定位置插入一个元素,时间复杂度为 O(n),因为需要移动该位置之后的元素。
**注意**:`insert(0, i)` 是在列表开头插入元素,这是`insert`方法性能最差的用例之一,因为它需要移动列表中的所有现有元素。
### 2. 删除元素
- `remove(x)` 方法移除列表中第一个值为x的元素,时间复杂度为 O(n),因为它需要遍历列表来找到该元素。
- `pop()` 方法移除并返回列表中的一个元素(默认为最后一个元素),时间复杂度为 O(1)。
- `pop(i)` 方法移除列表中指定位置的元素并返回它,时间复杂度为 O(n),因为索引i之前的元素都需要移动。
### 3. 搜索元素
- `index(x)` 方法返回列表中第一个值为x的元素的索引,如果找不到则抛出`ValueError`,时间复杂度为 O(n)。
- `in` 关键字用于检查元素是否在列表中,时间复杂度同样为 O(n)。
python -m timeit -s "lst = [i for i in range(1000)]; lst.insert(0, 0)" "lst.insert(0, 0)"
# 以此类推,对其他方法也进行类似的测试
这将帮助你更准确地了解不同`list`方法在不同场景下的性能表现。
注意:性能评估通常涉及时间复杂度的概念,但直接通过代码示例来感知可能不够精确。对于更严格的性能评估,建议使用`timeit`模块来测量代码片段的执行时间。
### 1. 添加元素
- `append()` 方法在列表末尾添加一个元素,时间复杂度为 O(1)。
- `insert(i, x)` 方法在指定位置插入一个元素,时间复杂度为 O(n),因为需要移动该位置之后的元素。
# append() 方法
lst = []
for i in range(10000):
lst.append(i)
# insert() 方法
lst_insert = []
for i in range(10000):
lst_insert.insert(0, i) # 在列表开头插入,模拟最坏情况
lst = []
for i in range(10000):
lst.append(i)
# insert() 方法
lst_insert = []
for i in range(10000):
lst_insert.insert(0, i) # 在列表开头插入,模拟最坏情况
**注意**:`insert(0, i)` 是在列表开头插入元素,这是`insert`方法性能最差的用例之一,因为它需要移动列表中的所有现有元素。
### 2. 删除元素
- `remove(x)` 方法移除列表中第一个值为x的元素,时间复杂度为 O(n),因为它需要遍历列表来找到该元素。
- `pop()` 方法移除并返回列表中的一个元素(默认为最后一个元素),时间复杂度为 O(1)。
- `pop(i)` 方法移除列表中指定位置的元素并返回它,时间复杂度为 O(n),因为索引i之前的元素都需要移动。
# remove() 方法
lst = [i for i in range(10000)]
lst.remove(5000) # 移除第一个值为5000的元素
# pop() 方法(默认移除最后一个元素)
lst_pop = [i for i in range(10000)]
lst_pop.pop() # 移除最后一个元素
# pop(i) 方法(移除指定位置的元素)
lst_pop_i = [i for i in range(10000)]
lst_pop_i.pop(0) # 移除第一个元素,模拟最坏情况
lst = [i for i in range(10000)]
lst.remove(5000) # 移除第一个值为5000的元素
# pop() 方法(默认移除最后一个元素)
lst_pop = [i for i in range(10000)]
lst_pop.pop() # 移除最后一个元素
# pop(i) 方法(移除指定位置的元素)
lst_pop_i = [i for i in range(10000)]
lst_pop_i.pop(0) # 移除第一个元素,模拟最坏情况
### 3. 搜索元素
- `index(x)` 方法返回列表中第一个值为x的元素的索引,如果找不到则抛出`ValueError`,时间复杂度为 O(n)。
- `in` 关键字用于检查元素是否在列表中,时间复杂度同样为 O(n)。
# index() 方法
lst = [i for i in range(10000)]
lst.index(5000) # 查找值为5000的元素的索引
# in 关键字
5000 in lst # 检查5000是否在列表中
```
### 性能评估建议
对于更精确的性能评估,你可以使用Python的`timeit`模块来测量这些操作的执行时间。例如:
python -m timeit -s "lst = []; lst.append(1)" "lst.append(1)"lst = [i for i in range(10000)]
lst.index(5000) # 查找值为5000的元素的索引
# in 关键字
5000 in lst # 检查5000是否在列表中
```
### 性能评估建议
对于更精确的性能评估,你可以使用Python的`timeit`模块来测量这些操作的执行时间。例如:
python -m timeit -s "lst = [i for i in range(1000)]; lst.insert(0, 0)" "lst.insert(0, 0)"
# 以此类推,对其他方法也进行类似的测试
这将帮助你更准确地了解不同`list`方法在不同场景下的性能表现。
最后,如果你对python语言还有任何疑问或者需要进一步的帮助,请访问https://www.xin3721.com 本站原创,转载请注明出处:
https://www.xin3721.com/Python/python50385.html
栏目列表
最新更新
求1000阶乘的结果末尾有多少个0
详解MyBatis延迟加载是如何实现的
IDEA 控制台中文乱码4种解决方案
SpringBoot中版本兼容性处理的实现示例
Spring的IOC解决程序耦合的实现
详解Spring多数据源如何切换
Java报错:UnsupportedOperationException in Col
使用Spring Batch实现批处理任务的详细教程
java中怎么将多个音频文件拼接合成一个
SpringBoot整合ES多个精确值查询 terms功能实
SQL Server 中的数据类型隐式转换问题
SQL Server中T-SQL 数据类型转换详解
sqlserver 数据类型转换小实验
SQL Server数据类型转换方法
SQL Server 2017无法连接到服务器的问题解决
SQLServer地址搜索性能优化
Sql Server查询性能优化之不可小觑的书签查
SQL Server数据库的高性能优化经验总结
SQL SERVER性能优化综述(很好的总结,不要错
开启SQLSERVER数据库缓存依赖优化网站性能
uniapp/H5 获取手机桌面壁纸 (静态壁纸)
[前端] DNS解析与优化
为什么在js中需要添加addEventListener()?
JS模块化系统
js通过Object.defineProperty() 定义和控制对象
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比