반응형

이전 포스트에서 문자열을 다뤄봤습니다.
문자열은 말 그대로 문자(char)와 열(list)였습니다. 즉 문자의 리스트 형태이죠. 문자의 특성은 어느정도 알게된 것 같으니 리스트를 알아봅시다.

리스트란?

리스트는 데이터의 집합을 표현하는 방식 중 하나입니다. 예를 들어봅시다.
1부터 10까지의 데이터를 메모리에 저장하고싶습니다. 어떻게 할 수 있을까요?

a = 1
b = 2
c = 3
d = 4
...
j = 10

저희가 지금까지 배운 지식으로는 무려 10줄이 필요하네요
리스트를 사용해볼까요?

a = [1, 2, 3, 4, ... 10]

리스트를 이용한다면 단 한 줄로 표현이 가능합니다. 이것이 리스트의 능력입니다.

리스트의 형태

리스트는 다양한 형태를 가질 수 있습니다.

a = [1, 2, 3, 4] # 단순 리스트 타입
b = [1, 2, 'a', 'b'] # Mixed 리스트 타입
c = [1, 2, [3, 4]] # 다차원 리스트 타입
d = [] # 빈 리스트

#을 쓴 이유는 # 이후에 쓰는 것들은 주석이라고하여 빌드할 때 전처리 과정에서 제거됩니다. 즉, 온전히 개발자 또는 협업하는 사람이 보기 위한 정보입니다.

위 예시에서 보이듯 리스트에는 숫자, 문자 등 다양한 형태가 들어갈 수 있습니다. 이는 사실 리스트 내부 타입을 특별하게 지정하지 않았기 때문에 가능한 것인데요.

일반적으로 실무 개발을 할 때는 특정 리스트 변수에는 같은 타입만 넣어서 혼란을 배제하도록 합니다. 즉 Mixed 리스트 타입은 지양합니다.

리스트의 기술

리스트는 데이터를 모아놓은 것이기 때문에 이를 잘 활용하려면 리스트 내부의 요소들을 추출하는 기법에 대해 알아야합니다.

인덱싱 & 슬라이싱

리스트는 데이터의 묶음이기 때문에 묶여져있는 데이터를 선택할 수 있어야합니다. 데이터 선택하는 기술은 인덱싱과 슬라이싱이 있는데요. 한 번 봅시다.

a = [1, 2, [3, 4]]

1, 2, [3, 4] 이 담긴 다차원 리스트 a가 있습니다. 먼저, 인덱싱부터 볼까요?

a[0] # 1
a[1] # 2
a[2] # [3, 4]
a[-1] # [3, 4]

파이썬의 인덱스는 1이 아닌 0부터 시작된다는 것을 명심하셔야합니다. 그리고, 다차원 리스트를 다룰 때 단차원 인덱싱으론 하나의 차원만 접근 가능합니다.

무슨 소리일까요...? 좀 어렵게 말했죠? 위 예제의 3, 4번은 리스트 a의 마지막 요소를 추출했습니다. 그러나 그 마지막 요소는 또다시 [3, 4]인 리스트이죠. 이렇게 리스트 안에 리스트가 있으면 차원으로 분리하게됩니다.

리스트 a의 1차원은 0, 1, [3, 4]이고, 3, 4는 2차원 공간에 있기 때문에 인덱싱으로 접근을 하려면 다음과 같이 해야합니다.

a[2][0] # 3
a[2][1] # 4

현실 세계의 차원의 개념을 생각하면 인덱싱 접근이 조금은 쉽게 느껴질 수 있습니다.

차원 현실 프로그래밍 예시
0차원 단일 데이터 int, float 등
1차원 1차원 리스트 [1, 2, 3]
2차원 2차원 리스트 [[1,2,3], [4,5,6]]
3차원 시공간 3차원 리스트 [1,[2,[3],4],5]

4차원부터 현실에서 뭐라 표현 불가능하지만 프로그래밍에서는 3차원에서 1뎁스의 리스트를 추가한다면 4차원이 되는 원리입니다.

슬라이싱을 한 번 봅시다. 슬라이싱은 이름부터가 뭔가 자른다죠? 리스트의 시작점과 끝 점을 선택하고 그 가운데 요소들을 추출하는 기술입니다. 예시를 한 번 보시죠.

a = [1, 2, 3, 4]
a[1:] # [2, 3, 4]
a[:3] # [1, 2, 3]
a[1:3] # [2, 3]

패턴이 보이시나요?

그렇습니다 이 슬라이싱에서 중요한 것은 :앞의 인덱스는 포함이고 뒤의 인덱스는 불포함입니다.

즉, 슬라이싱은 앞의 인덱스 이상 뒤의 인덱스 미만( pre_index <= x < post_index)의 관계입니다.

반응형

'파이썬 학습' 카테고리의 다른 글

[파이썬] 딕셔너리 자료형  (0) 2023.03.24
[파이썬] 튜플 자료형  (0) 2023.03.24
[파이썬] 문자열 자료형  (0) 2023.01.16
[파이썬] 숫자형 자료형  (0) 2023.01.16
[파이썬] 변수와 자료형  (0) 2023.01.15

+ Recent posts