Python 에서 순서 표 원리 와 실현 방법 에 대한 상세 한 설명
Python 의 순서 표
Python 의 list 와 tuple 두 가지 유형 은 순서 표 의 실현 기술 을 사용 하여 순서 표 의 모든 성질 을 가지 고 있 습 니 다.
tuple 은 변 하지 않 는 형식,즉 변 하지 않 는 순서 표 이기 때문에 내부 상 태 를 바 꾸 는 어떠한 조작 도 지원 하지 않 으 며,다른 측면 에 서 는 list 의 성질 과 유사 합 니 다.
list 의 기본 실현 기술
Python 표준 유형 list 는 요소 개수 가 변 하 는 선형 표 로 요 소 를 추가 하고 삭제 할 수 있 으 며 각종 작업 에서 기 존 요소 의 순서(즉,순서 유지)를 유지 할 수 있 으 며 다음 과 같은 행위 특징 도 가지 고 있 습 니 다.
이 특징 을 만족 시 키 기 위해 서 는 순서 표 기술 을 사용 하여 표 의 요 소 는 연속 적 인 저장 구역 에 저장 해 야 한다.
이 특징 을 만족 시 키 기 위해 요소 저장 소 를 교체 할 수 있 고 저장 소 를 교체 할 때 list 대상 의 표지 id 가 변 하지 않도록 분리 식 실현 기술 만 사용 할 수 있 습 니 다.
《데이터 구조 와 알고리즘 Python 언어 묘 사》주 종 연 저
Python 의 공식 실현 에서 list 는 다음 과 같은 전략 을 사용 합 니 다.빈 표(또는 작은 표)를 만 들 때 시스템 은 8 개의 요 소 를 수용 할 수 있 는 저장 소 를 분배 합 니 다.삽입 작업(insert 또는 append)을 수행 할 때 요소 저장 소 가 가득 차 면 4 배 큰 저장 소 를 바 꿉 니 다.그러나 이때 시계 가 이미 매우 크다(현재 밸브 값 은 50000)면 전략 을 바 꾸 고 배 를 더 하 는 방법 을 사용한다.이러한 변경 정책 을 도입 하 는 방식 은 너무 많은 남 은 저장 위치 가 나타 나 지 않도록 하기 위해 서 이다.
Python 의 공식 실현 에서 list 는 다음 과 같은 전략 을 사용 합 니 다.
/* This over-allocates proportional to the list size, making room
* for additional growth. The over-allocation is mild, but is
* enough to give linear-time amortized behavior over a long
* sequence of appends() in the presence of a poorly-performing
* system realloc().
* The growth pattern is: 0, 4, 8, 16, 25, 35, 46, 58, 72, 88, ...
*/
new_allocated = (newsize >> 3) + (newsize < 9 ? 3 : 6);
/* check for integer overflow */
if (new_allocated > PY_SIZE_MAX - newsize) {
PyErr_NoMemory();
return -1;
} else {
new_allocated += newsize;
}
python 순서 표 추가 삭제 실현
class shunxubiao:
def __init__(self,length):#length ,
self.length=length
self.data=[] #data
self.biao=-1 #
def weikong(self):#
if self.biao==-1:
return True
else:
return False
def mande(self):#
if self.biao+1==self.length:
return True
else:
return False
def qingkong(self):
if not self.weikong():
self.data=[]
self.biao=-1
def geshu(self):
return self.biao+1
def chazhao(self,x):#
return self.data[x]
def chazhao1(self,x):#
if self.weikong():
print(' ')
return -1
for i in range(self.biao+1):
if self.data[i]==x:
return i
break
print(' ')
def biaoweijia(self,x): #
if self.mande():
print('biaoyiman')
else:
self.data.append(x)
self.biao+=1
def charu(self,index,x):# index x
if self.mande():
print('biayiman')
elif index<0 or index>self.biao-1:
print('bunengcharu')
else:
for i in range(self.biao,index-1):
self.data[i+1]=self.data[i]
self.data[index-1]=x
self.biao+=1
def shanchu(self,x):# x
if self.weikong():#
print('kongde,bunengshanchu')
index=-1# index x
for i in (self.data):
index+=1
if i == x:
break
for i in range(index,self.biao-1):# x
self.data[i]=self.data[i+1]
self.biao-=1
c=shunxubiao(6)
c.data=[2,4,5,6]
c.biao=3
c.weikong()
print(c.chazhao(2))# 2
print(c.chazhao1(4))#
c.biaoweijia(7)#
print(c.data)
print(c.biao)
c.charu(3,9)
print(c.data)
print(c.biao)
c.shanchu(7)
print(c.data)
print(c.biao)
출력 결과:[2, 4, 5, 6, 7] 4 [2, 4, 5, 6, 7] 5 [2, 4, 5, 6, 7] 4
생각:왜 9 를 추가 하지 않 았 고 7 을 삭제 하지 않 았 을 까?
더 많은 파 이 썬 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있다.
본 논문 에서 말 한 것 이 여러분 의 Python 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.