Python의 리스트(list)에 대하여

다양한 타입의 데이터를 하나의 자료로 표현할 수 있는 시퀀스 자료형

 

etc-image-0
그림1. list에 대한 예시

 

1) 리스트 슬라이싱(slicing)

 

리스트의 값들은 각각에 해당하는 주소(offset)를 갖는다

 

그 주소를 기반으로 리스트의 부분값을 슬라이싱하여 가져올 수 있는 기법

 

etc-image-1
그림2. list의 index인 주소를 나타낸 그림

 

index가 처음부터 0,1,2,...로 가는건 누구나 알지만 거꾸로 -1,-2,-3...으로 가는건 아무나 아는 것이 아니다

 

etc-image-2
그림3. list slicing에 대한 사례

 

 

2) concatenation, repeat, in

 

리스트도 덧셈 연산으로 concatenation 가능

 

*연산은 리스트를 반복함(repeat)

 

in연산은 해당 원소가 리스트에 포함되어 있는지 확인

 

etc-image-3
그림4. list의 concatenation, repeat, in 연산

 

3) change element

 

리스트 내 원소를 변경

 

바꾸고 싶은 원소의 인덱스 i를 이용하여 color1[i]=(바꾸고 싶은 value)

 

etc-image-4
그림5. list에서 원소를 변경하는 방법

 

4) remove, append element

 

remove(특정원소), del (list이름)[index]로 원소를 제거

 

append는 원소를 추가하고 extend는 리스트를 추가

 

insert는 인덱스 값에 원소를 추가?

 

etc-image-5
그림6. append, extend, insert, remove, del 예시

 

5) 리스트의 메모리 저장 방식

 

파이썬의 리스트는 특이하게 메모리를 저장한다

 

다음 그림7은 a=[1,2,3], b=[3,2,1]로 선언한 상태,

 

a,b가 각 리스트의 메모리 주소를 가리킨다

 

etc-image-6
그림7. list a,b를 선언

 

b=a를 한다면 b는 더 이상 [3,2,1]을 가리키지 않고 [1,2,3]을 가리킨다

 

etc-image-7
그림8. b=a를 한 상태

 

b=a를 한 상태에서 a의 원소를 변경하면 b의 원소도 동일하게 변경됨

 

etc-image-8
그림9. b=a를 한 상태에서 a를 조작하면

 

b=a[:]를 이용해서 원본 복사를 하면 다르게 조작할 수 있다

 

혹은 import copy, copy.deepcopy()를 이용한다

 

etc-image-9
그림10. 원본 복사를 이용해 서로 다르게 리스트를 조작

 

728x90