it-swarm.com.de

Der effizienteste Weg, die ersten N Elemente einer Liste zu entfernen?

Ich muss die ersten n Elemente aus einer Liste von Objekten in Python 2.7 entfernen. Gibt es einen einfachen Weg, ohne Schleifen zu verwenden?

43
RedVelvet

Sie können Listenschneiden verwenden, um Ihr Ziel zu archivieren:

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

Ausgänge:

[6, 7, 8, 9]

Oder del, wenn Sie nur eine Liste verwenden möchten:

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

Ausgänge:

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

Python-Listen wurden nicht für den Beginn der Liste erstellt und sind bei diesem Vorgang sehr ineffektiv.

Während Sie schreiben können 

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

Es ist sehr ineffizient.


Wenn Sie nur Elemente aus Ihrer Liste löschen möchten, können Sie dies mit del tun:

del mylist[:n]

Das geht auch sehr schnell:

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

Wenn Sie Elemente vom Anfang der Liste abrufen möchten, sollten Sie collections.deque von Raymond Hettinger und seine popleft() - Methode verwenden.

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'

Ein Vergleich:

list + 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.

Dies ist der Code, wenn Sie mehrere Elemente aus der Liste löschen möchten. Sie können auch die Null vor dem Doppelpunkt überspringen. Es hat diese Bedeutung nicht. Das könnte gut sein.

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

Versuchen Sie diesen Code auszuführen:

del x[:N]