컴맹탈출기/Python을 파보자

선형 배열(Linear Array) 다루기 - append, insert, pop, del, index

Buddycial_SSAFY 2020. 11. 30. 19:58

 파이썬의 배열은 문자열, 정수, 실수, 문자, 등 다양하게 담을 수 있다.

그 중 선형 연산은 데이터가 일렬로 늘어서있는 형태를 말한다.

이런 선형 배열을 다루는 연산에 대해 알아보ZA


L = ['I', 'am', 'the', 'best']

배열 L은 문자열을 담고 있는 배열이다.

 

A = [20, 37, 58, 72, 91]

배열 A는 정수형 숫자를 담고 있는 배열이다.

 

1. 원소 추가하기

 1) append: 끝에 덧붙이기

L.append('programmer') #L = ['I','am','the','best','programmer']

 append는 배열의 맨 마지막 원소를 추가하는 함수이다. 

문자열 'programmer'은 배열의 다섯번째 원소, 즉 네번째 인덱스로 추가되게 된다. 

이 때 리스트의 길이가 무엇이든 간 원소가 맨 끝에 붙게 되므로, 리스트의 길이는 무관하다.(==O(1)이다.)

 

2) insert: 원하는 인덱스에 원소 추가하기

A.insert(3,65) #Array.insert(index, New element)
#A = [20, 37, 58, 65, 72, 91]

 insert는 원하는 인덱스에 새 원소를 추가하는 함수이다.

배열의 크기가 커져야 하므로 크기를 증가시키고, 새로 원소가 추가될 인덱스의 뒤에 있는 원소들을 한 칸씩 뒤로 미룬다.

그렇기에 리스트의 길이가 커지면 실행 시간도 늘어난다. (O(n))

 

2. 원소 삭제하기

1) pop: 맨 끝 원소 삭제 & 반환하기

returned = L.pop()
print(returned) #best
#혹은 L.pop([3]), L.pop(3)

 pop은 배열의 맨 마지막 원소를 배열에서 삭제하고, 이를 반환하는 함수이다.

맨 마지막 원소인 'best'가 사라지고, 이를 반환하여 변수 returned에 저장할 수도 있다.

이 때 리스트의 길이가 무엇이든 간 맨 끝 원소가 반환되므로, 리스트의 길이는 무관하다.(==O(1)이다.)

매개변수로 인덱스를 주면 해당 인덱스의 원소를 삭제하고, 이를 반환하기도 한다.

 

2) del: 원하는 인덱스의 원소 삭제하기

del(A[2]) #A = [20, 37, 72, 91]

 이 때, 인덱스 단독으로 쓰지 않음에 유의하자. del은 pop과 달리 삭제된 원소를 반환하지 않고,

이 점으로 인해 리스트의 길이가 짧을 땐 del이 pop보다 실행시간이 살짝 더 빠르지만, del의 실행과정 상 리스트의 길이가 커지면 실행 시간도 늘어나게 된다. (O(n))

 

del은 insert와는 반대 방향으로 삭제하고자 하는 인덱스의 원소 자리에 그 뒤에 있던 원소들을 하나 씩 당겨오는 방식으로 실행된다.

 

3. 원소 탐색하기

index: 원하는 원소의 인덱스 찾기

print(L.index('am')) #1

 이 연산은 리스트를 탐색해서 매개변수로 준 원소의 인덱스를 찾아서 반환해준다.

만약 존재하지 않는 원소라면, 에러를 띄운다.

 이 연산에서 리스트의 길이는 무관하다.(==O(1)이다.) (구체적인 이유는 더 찾아봐서 보충하도록 해야겠다.)