当前位置: 首页 > 知识库问答 >
问题:

删除列表中前N个元素的最有效方法是什么?

梅耘豪
2023-03-14

我需要从Python 2.7中的对象列表中删除前n个元素。有没有一种不使用循环的简单方法?

共有3个答案

南宫凯康
2023-03-14
l = [1, 2, 3, 4, 5]
del l[0:3] # Here 3 specifies the number of items to be deleted.

这是要从列表中删除多个项目的代码。你不妨跳过冒号前的零。它没有那么重要。这也可以。

l = [1, 2, 3, 4, 5]
del l[:3] # Here 3 specifies the number of items to be deleted.
姚新霁
2023-03-14

Python列表没有在列表的开头进行操作,并且在这种操作中非常无效。

虽然你可以写

mylist = [1, 2 ,3 ,4]
mylist.pop(0)

这是非常低效的。

如果您只想从列表中删除项目,您可以使用del执行此操作:

del mylist[:n]

速度也很快:

In [34]: %%timeit
help=range(10000)
while help:
    del help[:1000]
   ....:
10000 loops, best of 3: 161 µs per loop

如果您需要从列表的开头获取元素,您应该使用Raymond Hettinger的collections.deque及其popleft()方法。

from collections import deque

deque(['f', 'g', 'h', 'i', 'j'])

>>> d.pop()                          # return and remove the rightmost item
'j'
>>> d.popleft()                      # return and remove the leftmost item
'f'

比较:

In [30]: %%timeit
   ....: help=range(10000)
   ....: while help:
   ....:     help.pop(0)
   ....:
100 loops, best of 3: 17.9 ms per loop
In [33]: %%timeit
help=deque(range(10000))
while help:
    help.popleft()
   ....:
1000 loops, best of 3: 812 µs per loop
骆鸿运
2023-03-14

您可以使用列表切片来归档您的目标。

删除前5个元素:

n = 5
mylist = [1,2,3,4,5,6,7,8,9]
newlist = mylist[n:]
print newlist

输出:

[6, 7, 8, 9]

或者del如果您只想使用一个列表:

n = 5
mylist = [1,2,3,4,5,6,7,8,9]
del mylist[:n]
print mylist

输出:

[6, 7, 8, 9]
 类似资料:
  • 问题内容: 我已经开发了像这样的数组列表 现在我的问题是:如果我想从列表中删除“ 8”,哪种方法更好? 第一种方式: 第二种方式: 现在,请从性能的角度建议其中哪一个效率更高,速度更快,并且还有其他任何类似于内置函数的方法,通过使用它,我们可以删除重复项而无需进行过多迭代。 问题答案: 在性能方面,它们应该相似。你测试了吗 如果要使用内置方法,则可以达到类似的性能(通过测试确认): 最后,如果您想

  • 问题内容: 我已经看过这篇文章: Python:通过删除每个第n个元素从现有列表构建新列表,但是由于某些原因,它对我不起作用: 我这样尝试: 此函数需要一个列表和。然后,它使用列表中的n步删除第n个元素,并打印结果。 这是我的函数调用: 错误的输出: 代替 然后我从上面的链接尝试了一个变体: 再次,函数调用: 给了我同样的错误的结果: 不是 如何正确地从列表中删除/删除/删除 第n个 项目? 问题

  • 我有游戏对象的n-ary树。用户随机选择树中的一些对象并想要删除。问题在于,有些对象是另一个对象的子对象。事实证明,每次删除层次结构中的节点后,我必须遍历所有选定的节点并将其删除。算法是否比 O (n^2) 快? upd:为了更清楚我需要什么,我写了伪代码:

  • 问题内容: 获取存储在数组中的列表的前n个元素的最快方法是什么? 考虑到这种情况: 选项1: 选项2: 选项3: 是否有更快的方法?也许使用Java8流? 问题答案: 选项1比选项2快 因为选项2创建了一个新引用,然后从中创建了一个元素数组(选项1完美调整了输出数组的大小)。但是,首先您需要通过一个错误来解决此问题。使用(不是)。喜欢,

  • 我想删除html和tables标签和里面的任何东西(childs),最好的方法是什么? 我试着像这样遍历文档,但它不起作用,在Jsoup文档中,它说从DOM及其子对象中删除元素:

  • 问题内容: 在JavaScript中串联N个对象数组的最有效方法是什么? 数组是可变的,结果可以存储在输入数组之一中。 问题答案: 如果要连接两个以上的数组,那么这样做是为了方便和可能的性能。 对于仅连接两个数组,可以使用接受多个包含要添加到数组中的元素的参数的事实来代替将一个数组中的元素添加到另一个数组的末尾而不产生新数组。使用它也可以代替它,但是这样做似乎没有性能优势。 在ECMAScript