programing

목록에서 첫 번째 N개 요소를 제거하는 가장 효율적인 방법은 무엇입니까?

telebox 2023. 5. 22. 20:56
반응형

목록에서 첫 번째 N개 요소를 제거하는 가장 효율적인 방법은 무엇입니까?

Python 2.7의 객체 목록에서 처음 n개의 요소를 제거해야 합니다.루프를 사용하지 않고 쉬운 방법이 있습니까?

목록 슬라이싱을 사용하여 목표를 보관할 수 있습니다.

처음 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]

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 및 그 방법을 사용해야 합니다.

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'

비교:

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 + peopleft ()

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.

이 코드는 목록에서 여러 항목을 삭제하려는 경우에 사용됩니다.대장 앞에서 0을 건너뛰는 것이 좋습니다.그것은 그 중요성을 가지고 있지 않습니다.이것도 괜찮을 것 같습니다.

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

이 코드를 실행해 보십시오.

del x[:N]

다음 목록이 있다고 가정해 보겠습니다.

mylist = [1,2,3,4,5,6,7,8,9]

그리고 당신은 그것을 제거하기를 원합니다.x마지막 요소 및 다른 목록에 저장

newlist = [mylist.pop() for _ in range(x)]

요소를 처음부터 제거하기 위해 pop으로 전달한 인수를 수정할 수 있습니다.

newlist = [mylist.pop(0) for _ in range(x)]

또는 첫 번째 요소를 남기고 제거합니다.x뒤의 요소.

newlist = [mylist.pop(1) for _ in range(x)]

메모리 측면과 복잡성 측면에서 가장 효율적인 접근 방식은 다음과 같습니다.

popped_items = lst[:n]
del lst[:n]

먼저 처음 n개의 항목을 가져오고 해당 항목에만 공간을 할당할 수 있습니다.그런 다음 초기 목록에서 삭제합니다. 이 또한 빠릅니다.

l = [5,1,4,2,3,6]

목록을 가장 작은 것에서 가장 큰 것으로 정렬

l.sort()

목록에서 처음 두 항목 제거

for _ in range(2)
    l.remove(l[0])

목록 인쇄

print(l)

언급URL : https://stackoverflow.com/questions/33626623/the-most-efficient-way-to-remove-first-n-elements-in-a-list

반응형