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?
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]
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:
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
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.
Essayez d'exécuter ce code:
del x[:N]