2013-07-13 2 views
2

목록에서 값을 제거하거나 목록 중간에 삽입하는 파이썬 메소드 내부에는 특별한 것이 있습니까? 모든 것을 삭제/삽입하고 이동하는 것입니까? 또는 주위에 모든 변화없이 무작위 액세스를 유지하는 더 창의적인 무언가가 있습니다. 목록 앞쪽에 삽입하면 나머지 부분이 바뀌는 결과를 얻는다고 들었을 것입니다. 가운데에서 삭제할 때 동일한 아이디어가 사실입니까?pop, __delitem__, __delslice__, __setslice__, insert 등의 목록 구현

답변

2

모든 것이 바뀌고 있습니다. 파이썬리스트는 dynamic arrays으로 구현되어 중간에 삽입하거나 삭제할 때 O (n) 시간이 필요합니다.

O (1) 삽입 및 삭제를 중간에서 허용하는 영리한 방법이 O (1) 삽입 및 삭제까지 모든 곳에서 확장 될 수 있다는 것을 증명하는 문서 또는 이것에 대한 증거를 찾았습니다. 나는 아무것도 찾을 수 없었다. 대신에 C 언어로 작성된 Python 소스 코드에서 발췌를 얻을 수 있습니다.

Python 2.7.3 소스 코드에서 listobject.c의 삽입 방법은 모든 것이 삽입되는 위치의 오른쪽으로 이동합니다.

items = self->ob_item; 
for (i = n; --i >= where;) 
    items[i+1] = items[i]; 

불행히도 해당 삭제 코드를 찾을 수 없습니다.