본문 바로가기
Python/기초

파이썬 리스트 집중 해부 1편: 정의부터 인덱싱과 슬라이싱까지

by 모두의 케빈 2023. 8. 17.

 

 

목차

 

파이썬 리스트 자료형의 정의와 선언

 > 파이썬 리스트란

 > 리스트 선언하기

 > 리스트 자료형 확인하기: type 함수

 > 코딩 테스트 꿀팁: 공백 리스트 선언

 > n차원 배열: 리스트 안에 리스트

 

리스트 인덱싱

 > 인덱싱이란?

 > 단일 리스트 인덱싱

 > 참고: 리스트 길이 확인하는 len() 함수

 > 이중 리스트 인덱싱

 

리스트 슬라이싱

 > 슬라이싱이란?

 > 파이썬 리스트 슬라이싱 실습

 > 슬라이싱 응용: 일정 간격으로 출력하기

 > 슬라이싱 응용: 정방향과 역방향(음수 인덱스)

 

인덱싱과 슬라이싱의 차이

 > 인덱싱은 차원을 낮추고, 슬라이싱은 차원을 보존한다.

 

+ 기타 도움이 되는 연관글 추천

 

 

현실 세계에서는 데이터가 너무나 많기 때문에, 하나씩 변수를 선언해서 담기는 불가능에 가깝습니다. 여러 개의 값을 보관해 줄 수 있는 주머니와 같은 변수가 필요합니다. 여기서 등장하는 것이 컬렉션 자료형입니다.

 

컬렉션 자료형은 여러 개의 개별 원소들을 하나의 변수에 모아주는 역할을 합니다. 파이썬에서 사용되는 대표적인 컬렉션 자료형은 다음과 같습니다.

 

자료형 선언 역할
리스트(List) 대괄호[ ] 또는 list() 여러 유형의 데이터를 보관
튜플(Tuple) 소괄호( ) 또는 tuple() 값을 변경할 수 없는 리스트
셋(Set) 중괄호 { } 또는 set() 집합, 중복을 허용하지 않음
딕셔너리(Dictionary) {key:value} 또는 dict() (key : value) 쌍으로 데이터를 보관

 

 

 

 

파이썬 리스트 자료형의 정의와 선언


파이썬 리스트(list)란?

 

리스트는 컬렉션 자료형의 일부로, 다양한 값들을 모아둔 배열이라고 할 수 있겠습니다. 리스트의 선언은 대괄호를 이용합니다. 

 

 

리스트 선언하기

 

아래 코드처럼 대괄호 안에 필요한 원소들을 입력해 주면 되는데요. 자료형이 다른 값도 함께 담을 수 있는 것이 특징입니다.

# list 선언

sample_list = [1,2,3,4,5]
sample_list2 = [1,2,'abc',4]
sample_list3 = [6,421,7799,'def']

 

 

리스트 자료형 확인하기: type() 함수

 

파이썬은 모든 자료형이 객체로 이루어져 있기 때문에, 새로운 자료형을 보신다면 type을 확인하시는 습관을 들이시는 게 중요합니다. 리스트 자료형의 type을 보도록 하겠습니다.

 

# list 자료형 확인

sample_list = [1,2,3,4,5]
print(type(sample_list))

 >>>>> 실행 결과: <class 'list'>

 

 

코딩 테스트 꿀팁: 공백 리스트 선언

 

코딩 테스트 문제를 풀다 보면, 아무 값이 없는 공백의 리스트를 선언해야 하는 경우가 생깁니다. 공백 리스트의 선언은 아래 두 가지 방법 중 하나로 할 수 있습니다.

 

# 공백 리스트 선언
# 둘 중, 편하신 방법을 사용하세요.

temp_list = []
temp_list2 = list()

 

 

n차원 배열: 리스트 안에 리스트

 

리스트는 어떤 데이터 유형도 보관할 수 있는 주머니입니다. 리스트도 '파이썬 자료형' 중 하나이기 때문에, 리스트 안에 리스트를 넣을 수 있습니다. 

 

# 리스트 안의 리스트
# 3번째 원소가 [3,4]인 리스트

double_list = [1,2,[3,4],5]
print(double_list[2])
 >>>>> 실행 결과: [3,4]

 

리스트는 이론적으로 n차원 배열을 구성할 수 있는데요. 

 

리스트 n차원 배열

 

위 그림에서 1차원은 대괄호가 '한 개'인 리스트입니다. 대괄호가 '두 개'라면 2차원이고 위 그림에서 오른쪽에 해당합니다.

 

참고로 리스트로는 배열을 잘 다루지 않습니다. 지원하는 기능이 제한적이기 때문입니다. 다차원 배열은 나중에 배우시는 numpy 라이브러리를 활용하여 다루게 됩니다. n차원 배열 리스트는 공부용으로만 알아두세요.

 

 

 

 

리스트 인덱싱


인덱싱이란?

 

리스트에는 순서가 있습니다. [1,2,3,4]라는 리스트가 있다고 가정하면 1이 첫 번째 원소이고 2는 두 번째 원소입니다. 파이썬에서 순서가 있는 배열은 '몇 번째 문자를 출력해 줘!’라고 명령할 수 있는데요.

 

이처럼 여러 값을 순회할 수 있는 객체에서 어떠한 기준 값으로 개별 문자에 접근하는 방식을 인덱싱(Indexing)이라고 합니다.

 

인덱싱은 배열형 자료형에 대괄호([])를 붙여서 사용합니다. 대괄호 안에는 기준 값이 들어가는데요. 문자열의 경우 ‘순서’가 있으므로, 이 순서 값을 기준 값으로 활용합니다.

 

파이썬에서 거의 대부분의 경우에 모든 순서는 0부터 시작합니다. 다시 말해, 첫 번째 원소의 인덱스는 '1'이 아니라 '0'이라는 의미입니다. 이는 굉장히 헷갈리는 개념이기 때문에 꼭 기억해 주세요.

 

참고 해주세요!

파이썬에서 인덱스(Index)라고 함은, 어떤 데이터를 가르키는 지표입니다. 특별한 경우가 아니라면, 인덱스는 순서 정보를 의미합니다. 물론 숫자가 아닌 문자열 등이 인덱스로 사용되는 경우도 있습니다

 

단일 리스트 인덱싱

 

인덱싱으로 리스트 내 개별 원소를 출력하겠습니다. 인덱싱을 사용하기 위해서는 배열형 자료형의 이름 옆에 대괄호를 붙이고 그 안에 인덱스 번호(순서)를 입력하면 됩니다.

 

# 인덱싱 연습

sample_list = [1,2,3,4]
print(sample_list[0])

 >>>>> 실행 결과: 1

 

참고로 인덱스는 음수도 가능합니다.

# 리스트 인덱싱: 문자열처럼 양수, 음수 모두 가능하다.

sample_list = [0,1,2,3,4,5]
print(sample_list[0], sample_list[-1])

 >>>>> 실행 결과: 0 5

※ 음수 인덱싱에 대한 개념은 본문 맨 아래에 잘 정리된 글의 링크를 첨부해 두었습니다. 혹시 잘 모르시는 분들께서는 해당 글 꼭 참고해 주세요.

 

 

참고: 리스트 길이 확인하는 len() 함수

 

파이썬에서 리스트의 길이란, 리스트 안의 원소가 몇 개가 있는지를 의미합니다. 리스트 길이는 len() 함수를 통해 확인할 수 있습니다.

 

# 리스트 길이 확인: len() 함수

sample_list = [1,2,3,4]
print(len(sample_list))

 >>>>> 실행 결과: 4

 

 

이중 리스트 인덱싱

 

리스트 안에 리스트가 있는 이중 리스트에 대해 인덱싱을 해보겠습니다. 원리는 단일 리스트와 동일합니다. 단, 인덱싱의 결과값이 새로운 리스트일 뿐입니다.

 

double_list의 경우, 2개의 원소가 있습니다. 첫 번째 원소는 [1,2,3]인 리스트이고 두 번째 원소는 [4,5,6]인 리스트입니다.

# double_list의 원소 개수

double_list = [[1,2,3],[4,5,6]]
print(len(double_list))
 >>>>> 실행 결과: 2

 

 

double_list 리스트의 첫 번째 원소가 [1,2,3]이라는 리스트이기 때문에 double_list[0]은 [1,2,3]입니다.

# 이중 리스트 인덱싱

double_list = [[1,2,3],[4,5,6]]
print(double_list[0])
 >>>>> 실행 결과: [1,2,3]

 

 

[1,2,3]이 아니라 ‘숫자 1’에 접근하기 위해서는 인덱싱을 두 번 해야 합니다. 인덱싱을 한 번 할 때마다, 대괄호가 하나씩 벗겨지는데 ‘숫자 1’은 두 개의 대괄호에 둘러싸여 있으니 인덱싱을 두 번 해야 한다고 생각하시면 됩니다.

 

아래 코드에 대해 직접 실습해 보시고, 2차원 배열에 대한 감을 잡으시길 바랍니다.

# 연습 문제

double_list = [[1,2,3],[4,5,6]]
print(double_list[0][1]) # 첫 번째 행, 두 번째 열의 인자
print(double_list[1][2]) # 두 번째 행, 세 번째 열의 인자

 

 

 

 

리스트 슬라이싱


슬라이싱이란?

 

한 번에 여러 글자를 출력하려면 어떻게 해야 할까요? 이럴 때 사용하는 방법이 슬라이싱(Slicing)입니다. 

 

슬라이싱은 시작점과 끝점이 주어지면 그 범위에 포함되는 개별 문자들을 모두 출력합니다. 마치 인덱싱을 미끄러지듯(Slicing)이 하는 셈입니다.

 

슬라이싱은 출력하고 싶은 문자열의 범위를 대괄호 안에 ‘시작 인덱스 값 : 마지막 인덱스 값’의 형식으로 지정합니다. 이때 중요한 것은 슬라이싱은 마지막 인덱스 값을 포함하지 않고 바로 직전까지의 문자만 출력합니다. (이하가 아닌 미만의 개념)

 

 

파이썬 리스트 슬라이싱 실습

 

다양한 경우에 대하여 슬라이싱 실습을 진행해 보겠습니다. 슬라이싱 문법은 아래 코드처럼 대괄호 안에 시작 인덱스와 마지막인덱스를 콜론(:) 양 옆에 적어줍니다. 

# 리스트 슬라이싱(Slicing) 연습
# 마지막 인덱스는 범위에 포함되지 않는다. (미만)

sample_list = [1,2,3,4,5,6,7,8,9,10]
print(sample_list[0:5])

 >>>>> 실행 결과: [1,2,3,4,5]

 

슬라이싱의 시작 인덱스는 생략될 수 있습니다.

# 시작 인덱스 생략 시, '처음부터' 라는 의미가 된다.

sample_list = [1,2,3,4,5,6,7,8,9,10]
print(sample_list[:5])

 >>>>> 실행 결과: [1,2,3,4,5]

 

물론 마지막 인덱스는 생략될 수 있습니다.

# 마지막 인덱스 생략 시, '끝까지' 라는 의미가 된다.

sample_list = [1,2,3,4,5,6,7,8,9,10]
print(sample_list[3:])

 >>>>> 실행 결과: [4,5,6,7,8,9,10]

 

시작과 마지막 인덱스를 모두 생략할 수도 있습니다. 이것은 여러분께서 직접 실습해 보시길 바랍니다.

 

 

슬라이싱 응용: 일정 간격으로 출력하기

 

한 칸씩이 아니라, 원하는 특정 간격으로 띄워서 문자열을 출력할 수 있습니다. 이럴 때는 콜론(:)이 하나 더 필요합니다.

 

# 2칸 간격으로 출력

sample_list = [1,2,3,4,5,6,7,8,9,10]
print(sample_list[0:9:2])

 >>>>> 실행 결과: [1, 3, 5, 7, 9]

 

 

슬라이싱 응용: 정방향과 역방향(음수 인덱스)

 

슬라이싱에는 정방향과 역방향이 있습니다. 정방향은 왼쪽에서 오른쪽을 의미하고 역방향은 오른쪽에서 왼쪽을 의미합니다.

 

글이 길어져서 해당 내용은 본문 아래에 상세하게 설명된 글을 링크로 첨부해 두었습니다. 아래 코드가 이해되시지 않는다면, 해당 글을 꼭 읽어보시는 것을 추천드립니다.

 

sample_list = [1,2,3,4,5,6,7,8,9,10]

# 정방향 + 음수 인덱스
print(sample_list[0:-1:2])

# 역방향 + 음수 인덱스
print(sample_list[-1:-6:-1])

# 역방향 + 양수 인덱스
print(sample_list[9:4:-1])


 >>>>> 실행 결과
[1, 3, 5, 7, 9]
[10, 9, 8, 7, 6]
[10, 9, 8, 7, 6]

 

 

 

 

인덱싱과 슬라이싱의 차이

인덱싱은 차원을 낮추고, 슬라이싱은 차원을 보존한다.

 

리스트 인덱싱과 슬라이싱의 중요한 차이점 중 하나는, 인덱싱은 차원을 하나 낮추고 슬라이싱은 원래의 차원을 보존해 준다는 점입니다.

 

2차원 리스트 인덱싱 → 결과값은 1차원 리스트

1차원 리스트 인덱싱 → 결과값은 0차원 개별 원소

 

2차원 리스트 슬라이싱 → 결과값은 2차원 리스트

1차원 리스트 슬라이싱 → 결과값은 1차원 리스트

 

아래의 코드를 보겠습니다. double_list[0]이라는 인덱싱의 결과는 1차원 배열인 [1,2,3]입니다. 그러나 double_list[:1]이라는 슬라이싱을 활용하면 [[1,2,3]]이라는 2차원 배열이 출력됩니다.

# 인덱싱과 슬라이싱의 차이

double_list = [[1,2,3],[4,5,6]]

print(double_list[0]) 
print(double_list[:1])

 >>>>> 실행 결과:
[1,2,3]
[[1,2,3]]

 

 

 

 

이 글이 도움이 되셨다면, 아래 글은 어떠신가요?

 

 

인덱싱과 슬라이싱 상세 정리(음수 인덱싱 포함)

 

[파이썬/Python] 인덱싱과 슬라이싱: 음수 인덱스가 어려워요.

 

[파이썬/Python] 인덱싱과 슬라이싱: 음수 인덱스가 어려워요.

문자열과 리스트의 인덱스 문자열과 리스트는 Iterable(순회할 수 있는) 객체입니다. 문자열은 여러 개의 문자들을 모아 놓은 배열이고, 리스트는 다양한 값을 모아 놓은 배열입니다. 이 두 자료형

kevinitcoding.tistory.com

 

 

심화 학습: 리스트 표현식

 

[파이썬/Python] List Comprehension: 효율적인 리스트 생성

 

[파이썬/Python] List Comprehension: 효율적인 리스트 생성

List Comprehension List Comprehension, 리스트 표현식 또는 리스트 조건식이라고 번역합니다. Comprehension은 이해력이라는 뜻입니다. 따라서 List Comprehension은 리스트를 얼마나 이해하고 잘 생성할 수 있는

kevinitcoding.tistory.com

 

 

댓글