web-dev-qa-db-fra.com

Le moyen le plus efficace de supprimer les N premiers éléments d’une liste?

Je dois supprimer les n premiers éléments d'une liste d'objets dans Python 2.7. Y a-t-il un moyen facile, sans utiliser de boucles?

43
RedVelvet

Vous pouvez utiliser le découpage de liste pour archiver votre objectif:

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

Les sorties:

[6, 7, 8, 9]

Ou del si vous ne souhaitez utiliser qu'une liste:

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

Les sorties:

[6, 7, 8, 9]
50
Avión

Les listes Python n'ont pas été conçues pour fonctionner au début de la liste et sont très inefficaces lors de cette opération.

Alors que vous pouvez écrire 

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

C'est très inefficace.


Si vous souhaitez uniquement supprimer des éléments de votre liste, vous pouvez le faire avec del:

del mylist[:n]

Ce qui est aussi très rapide:

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

Si vous devez obtenir des éléments depuis le début de la liste, vous devez utiliser collections.deque de Raymond Hettinger et sa méthode 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'

Une comparaison:

liste + pop (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.

C'est le code si vous souhaitez supprimer un certain nombre d'éléments de la liste. Vous pouvez aussi sauter le zéro avant les deux points. Cela n'a pas cette importance. Cela pourrait faire aussi bien.

l = [1, 2, 3, 4, 5]
del l[:3] # Here 3 specifies the number of items to be deleted.
1
user5077528

Essayez d'exécuter ce code:

del x[:N]
0