python - 从列表中删除元素的最佳方法

标签 python list

我想知道从列表中删除元素的最佳方式/有效方式是什么。

few functions由 Python 提供:

  1. some_list.remove(value),但如果找不到值,它会抛出错误。
  2. some_list.pop(some_list[index]),移除列表中给定位置的项目,并返回它。
  3. del (some_list[index]),它从给定索引中删除元素,它与 pop 不同,因为它不返回值。

场景:

  • 如果您要删除的项目很少,请说一个元素或 1 到 5 个元素。
  • 如果您必须删除序列中的多个项目。
  • 如果您必须根据条件删除不同的项目。
  • 如果您有一个列表的列表并希望按顺序删除元素怎么办。

最佳答案

我的回答并不完全针对你的问题,但在你阅读本文后,我希望你能根据自己的需要决定选择哪种类型。

Python 的列表是 variable-length arrays ,而不是 Lisp 风格的链表。该实现使用对其他对象的连续引用数组,并保留指向该数组的指针。

这使得索引列表成为一个[i]操作,其成本独立于列表的大小或索引的值。

当追加或插入项目时,引用数组的大小会调整。 应用了一些算法来提高重复附加项的性能; 当数组必须增长时,会分配一些额外的空间,所以接下来的几次 不需要实际调整大小,即过度分配。 More Information

删除与弹出与删除:

乍一看,它们似乎都在做同样的事情。

在引擎盖下它的行为不同。

removing :通过从 0 索引迭代到第一个从列表中删除一个元素 找到元素的匹配项。如果元素位于末尾,则需要更多时间进行迭代。

pop :使用索引从列表中删除元素。花费更少的时间。

del :是一个 python 语句,用于从命名空间或项目中删除名称 从字典中,或通过使用索引从列表中的项目。

删除:

  • 它删除了第一次出现的值。
  • 如果值不存在则引发 ValueError。
  • 它只接受一个参数,因此您不能一次性删除多个值。

流行音乐:

  • 删除并返回索引处的项目(默认最后一个)。
  • 如果列表为空或索引超出范围,则引发 IndexError。
  • 它只接受一个参数,因此您不能一次性删除多个值。

删除:

  • 删除索引处的项目并且不返回任何内容。
  • 它可以从列表中删除切片或清除整个列表。

基准:

最坏情况:从列表末尾删除。

yopy:-> python -m timeit "x=range(1000)" "x.pop(999)"
100000 loops, best of 3: 10 usec per loop
yopy:-> python -m timeit "x=range(1000)" "x.remove(999)"
10000 loops, best of 3: 31.3 usec per loop
yopy:-> python -m timeit "x=range(1000)" "del x[999]"
100000 loops, best of 3: 9.86 usec per loop
yopy:->

最佳情况:列表的开头。

yopy:-> python -m timeit "x=range(1000)" "x.remove(1)"
100000 loops, best of 3: 10.3 usec per loop
yopy:-> python -m timeit "x=range(1000)" "x.pop(1)"
100000 loops, best of 3: 10.4 usec per loop
yopy:-> python -m timeit "x=range(1000)" "del x[1]"
100000 loops, best of 3: 10.4 usec per loop
yopy:->

注意事项:

如果数组在中间增长或收缩

  • Realoc 仍然取决于总长度。
  • 但是,必须复制所有尾随元素

所以,现在我希望您可以根据自己的需要来决定需要选择什么。

关于python - 从列表中删除元素的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21510140/

相关文章:

Python 检查列表是否只包含空元素或空格

python - 模板中的 Django 变量导致 SQL 查询

python - 在 Tornado AsyncHTTPTestCase 中缓存 HTTP 响应

python - 在python中对并行列表进行排序 - 第一项降序,第二项升序

c# - ListView /列表过滤器 Windows Phone 8.1 C#

python - 值对于定义的数据类型来说太大

python - Flask_httpauth 装饰器缺少所需的位置参数 f

linux - 包含所有已加载内核模块的列表位于何处

excel - 使用 VBA 从 Excel 表中导入 Sharepoint 2010 列表数据

java - 对以 map 作为输入的列表进行排序