it-swarm.com.ru

Самый эффективный способ удалить первые N элементов в списке?

Мне нужно удалить первые n элементов из списка объектов в Python 2.7. Есть ли простой способ, без использования петель?

43
RedVelvet

Вы можете использовать нарезку списка для архивирования вашей цели:

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]
50
Avión

Списки 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

Если вам нужно получить элементы в начале списка, вы должны использовать collections.deque от Raymond Hettinger и его 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'

Сравнение:

список + поп (0)

In [30]: %%timeit
   ....: help=range(10000)
   ....: while help:
   ....:     help.pop(0)
   ....:
100 loops, best of 3: 17.9 ms per loop

deque + popleft ()

In [33]: %%timeit
help=deque(range(10000))
while help:
    help.popleft()
   ....:
1000 loops, best of 3: 812 µs per loop
32
Sebastian Wozny
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.
1
user5077528

Попробуйте запустить этот код:

del x[:N]
0
Mangu Singh Rajpurohit