Python

3-1. 리스트(List)의 정의와 사용

Python_Basic 2025. 6. 23. 09:27

파이썬 리스트의 정의와 사용

 

안녕하세요! 지난 시간에는 조건문과 반복문을 중첩하여 사용하는 방법을 통해 프로그램의 흐름을 더욱 복잡하고 정교하게 제어하는 법을 배웠습니다. 이제 여러분의 파이썬 프로그램은 다양한 상황에 따라 유연하게 동작할 수 있게 되었을 거예요!

이번 시간부터는 파이썬에서 데이터를 효율적으로 저장하고 관리하는 데 사용되는 핵심적인 **자료구조(Data Structure)**에 대해 알아보겠습니다. 그 첫 번째 주인공은 바로 **리스트(List)**입니다.

리스트는 여러 개의 데이터를 순서대로 담아 관리할 수 있는 매우 유용하고 유연한 자료구조입니다. 마치 여러 물건을 한 줄로 나열해 놓은 진열대와 같다고 생각하시면 됩니다.


Part 1: 리스트(List)란 무엇인가?

파이썬의 리스트는 다음과 같은 특징을 가집니다.

  • 순서가 있다: 데이터를 저장한 순서가 유지됩니다. 따라서 인덱스(Index)를 사용하여 특정 위치의 데이터에 접근할 수 있습니다.
  • 다양한 자료형 저장 가능: 하나의 리스트 안에 정수, 실수, 문자열, 심지어 다른 리스트까지! 어떤 자료형의 데이터든 함께 저장할 수 있습니다.
  • 변경 가능하다 (mutable): 한 번 만든 리스트의 요소를 추가, 삭제, 변경할 수 있습니다.
  • 중복 허용: 같은 값을 여러 번 저장할 수 있습니다.

1. 리스트 만들기

리스트는 대괄호([]) 안에 쉼표(,)로 구분하여 요소들을 나열하는 방식으로 만듭니다.

예시:

Python
 
# 파일 이름: list_creation.py

# 다양한 자료형을 포함하는 리스트
numbers = [1, 2, 3, 4, 5]
fruits = ["사과", "바나나", "체리", "사과"] # 중복 허용
mixed_data = [10, "Hello", 3.14, True] # 다양한 자료형

# 빈 리스트도 만들 수 있습니다.
empty_list = []

print("숫자 리스트:", numbers)
print("과일 리스트:", fruits)
print("혼합 데이터 리스트:", mixed_data)
print("빈 리스트:", empty_list)

print("numbers의 자료형:", type(numbers))

 
# 파일 이름: list_creation.py

# 다양한 자료형을 포함하는 리스트
numbers = [1, 2, 3, 4, 5]
fruits = ["사과", "바나나", "체리", "사과"] # 중복 허용
mixed_data = [10, "Hello", 3.14, True] # 다양한 자료형

# 빈 리스트도 만들 수 있습니다.
empty_list = []

print("숫자 리스트:", numbers)
print("과일 리스트:", fruits)
print("혼합 데이터 리스트:", mixed_data)
print("빈 리스트:", empty_list)

print("numbers의 자료형:", type(numbers))

[VS Code 터미널 출력]

파이썬 리스트 생성 및 자료형 확인 예시

 


Part 2: 리스트 요소 접근하기 - 인덱싱(Indexing)

리스트의 각 요소는 고유한 인덱스(Index) 번호를 가집니다. 이 인덱스를 사용하여 특정 위치의 요소에 접근할 수 있습니다.

  • 인덱스는 0부터 시작: 첫 번째 요소의 인덱스는 0, 두 번째는 1... 이런 식입니다.
  • 음수 인덱스: 뒤에서부터 접근할 때는 음수 인덱스를 사용합니다. [-1]은 마지막 요소, [-2]는 뒤에서 두 번째 요소입니다.

1. 인덱스를 이용한 요소 접근

예시:

Python
 
# 파일 이름: list_indexing.py

my_list = ["apple", "banana", "cherry", "date", "elderberry"]

# 양수 인덱스 (앞에서부터 세기)
print(f"첫 번째 요소 (인덱스 0): {my_list[0]}")
print(f"세 번째 요소 (인덱스 2): {my_list[2]}")
print(f"다섯 번째 요소 (인덱스 4): {my_list[4]}")

# 음수 인덱스 (뒤에서부터 세기)
print(f"마지막 요소 (인덱스 -1): {my_list[-1]}")
print(f"뒤에서 두 번째 요소 (인덱스 -2): {my_list[-2]}")

 
# 파일 이름: list_indexing.py

my_list = ["apple", "banana", "cherry", "date", "elderberry"]

# 양수 인덱스 (앞에서부터 세기)
print(f"첫 번째 요소 (인덱스 0): {my_list[0]}")
print(f"세 번째 요소 (인덱스 2): {my_list[2]}")
print(f"다섯 번째 요소 (인덱스 4): {my_list[4]}")

# 음수 인덱스 (뒤에서부터 세기)
print(f"마지막 요소 (인덱스 -1): {my_list[-1]}")
print(f"뒤에서 두 번째 요소 (인덱스 -2): {my_list[-2]}")

[VS Code 터미널 출력]

파이썬 리스트 인덱싱으로 요소 접근 예시

 

2. 리스트 길이 확인하기 (len() 함수)

  • len() 함수는 리스트에 몇 개의 요소가 들어있는지, 즉 리스트의 길이를 반환합니다.

예시:

Python
 
# 파일 이름: list_length.py

my_list = ["apple", "banana", "cherry"]
list_length = len(my_list)
print(f"리스트의 길이: {list_length}")

empty_list = []
print(f"빈 리스트의 길이: {len(empty_list)}")

 
# 파일 이름: list_length.py

my_list = ["apple", "banana", "cherry"]
list_length = len(my_list)
print(f"리스트의 길이: {list_length}")

empty_list = []
print(f"빈 리스트의 길이: {len(empty_list)}")

[VS Code 터미널 출력]

파이썬 len 함수로 리스트 길이 확인 예시

 


Part 3: 리스트 요소 변경하기

리스트는 변경 가능한(mutable) 자료형이므로, 인덱스를 사용하여 특정 위치의 요소를 새로운 값으로 변경할 수 있습니다.

예시:

Python
 
# 파일 이름: list_modification.py

fruits = ["사과", "바나나", "체리"]
print(f"원본 리스트: {fruits}")

# 인덱스를 사용하여 요소 변경
fruits[1] = "오렌지" # 인덱스 1의 '바나나'를 '오렌지'로 변경
print(f"변경 후 리스트: {fruits}")

# 존재하지 않는 인덱스에 접근하면 오류 발생!
# fruits[3] = "포도" # IndexError: list assignment index out of range

 
# 파일 이름: list_modification.py

fruits = ["사과", "바나나", "체리"]
print(f"원본 리스트: {fruits}")

# 인덱스를 사용하여 요소 변경
fruits[1] = "오렌지" # 인덱스 1의 '바나나'를 '오렌지'로 변경
print(f"변경 후 리스트: {fruits}")

# 존재하지 않는 인덱스에 접근하면 오류 발생!
# fruits[3] = "포도" # IndexError: list assignment index out of range

[VS Code 터미널 출력]

파이썬 리스트 요소 변경 예시

 


Part 4: 리스트에 요소 추가/삭제하기

리스트는 동적으로 크기가 변할 수 있으므로, 요소를 추가하거나 삭제하는 기능이 매우 중요합니다.

1. 요소 추가하기 (append(), insert())

  • append(item): 리스트의 맨 뒤에 새로운 요소를 추가합니다.
  • insert(index, item): 특정 index 위치에 item을 삽입합니다. 해당 인덱스부터 뒤의 요소들은 한 칸씩 뒤로 밀립니다.

예시:

Python
 
# 파일 이름: list_add_elements.py

my_numbers = [1, 2, 3]
print(f"원본 리스트: {my_numbers}")

# append로 맨 뒤에 요소 추가
my_numbers.append(4)
my_numbers.append(5)
print(f"append 후: {my_numbers}") # 결과: [1, 2, 3, 4, 5]

# insert로 특정 위치에 요소 삽입
my_numbers.insert(0, 0) # 인덱스 0에 0 삽입
print(f"insert(0, 0) 후: {my_numbers}") # 결과: [0, 1, 2, 3, 4, 5]

my_numbers.insert(3, 2.5) # 인덱스 3에 2.5 삽입
print(f"insert(3, 2.5) 후: {my_numbers}") # 결과: [0, 1, 2, 2.5, 3, 4, 5]

 

# 파일 이름: list_add_elements.py

my_numbers = [1, 2, 3]
print(f"원본 리스트: {my_numbers}")

# append로 맨 뒤에 요소 추가
my_numbers.append(4)
my_numbers.append(5)
print(f"append 후: {my_numbers}")

# insert로 특정 위치에 요소 삽입
my_numbers.insert(0, 0) # 인덱스 0에 0 삽입
print(f"insert(0, 0) 후: {my_numbers}")

my_numbers.insert(3, 2.5) # 인덱스 3에 2.5 삽입
print(f"insert(3, 2.5) 후: {my_numbers}")

[VS Code 터미널 출력]

파이썬 리스트에 append와 insert로 요소 추가 예시

 

2. 요소 삭제하기 (remove(), pop(), del)

  • remove(value): 리스트에서 처음 발견되는 특정 값을 삭제합니다. 값이 없으면 오류가 발생합니다.
  • pop(index): 특정 index 위치의 요소를 삭제하고 그 요소를 반환합니다. 인덱스를 지정하지 않으면 마지막 요소를 삭제하고 반환합니다.
  • del 리스트[index]: 특정 index 위치의 요소를 삭제합니다. pop()처럼 반환하지는 않습니다.

예시:

Python
 
# 파일 이름: list_delete_elements.py

items = ["빵", "우유", "계란", "빵", "치즈"]
print(f"원본 리스트: {items}")

# remove로 값 삭제
items.remove("빵") # 첫 번째 '빵'이 삭제됩니다.
print(f"remove('빵') 후: {items}") # 결과: ['우유', '계란', '빵', '치즈']

# pop으로 인덱스 삭제 및 값 반환
removed_item = items.pop(1) # 인덱스 1의 '계란' 삭제 및 반환
print(f"pop(1) 후: {items}, 삭제된 항목: {removed_item}") # 결과: ['우유', '빵', '치즈'], 삭제된 항목: 계란

last_item = items.pop() # 인덱스 지정 안 하면 마지막 요소 삭제
print(f"pop() 후: {items}, 삭제된 항목: {last_item}") # 결과: ['우유', '빵'], 삭제된 항목: 치즈

# del로 인덱스 삭제
del items[0] # 인덱스 0의 '우유' 삭제
print(f"del items[0] 후: {items}") # 결과: ['빵']

# 모든 요소 삭제
items.clear()
print(f"clear() 후: {items}") # 결과: []

 
# 파일 이름: list_delete_elements.py

items = ["빵", "우유", "계란", "빵", "치즈"]
print(f"원본 리스트: {items}")

# remove로 값 삭제
items.remove("빵") # 첫 번째 '빵'이 삭제됩니다.
print(f"remove('빵') 후: {items}")

# pop으로 인덱스 삭제 및 값 반환
removed_item = items.pop(1) # 인덱스 1의 '계란' 삭제 및 반환
print(f"pop(1) 후: {items}, 삭제된 항목: {removed_item}")

last_item = items.pop() # 인덱스 지정 안 하면 마지막 요소 삭제
print(f"pop() 후: {items}, 삭제된 항목: {last_item}")

# del로 인덱스 삭제
del items[0] # 인덱스 0의 '우유' 삭제
print(f"del items[0] 후: {items}")

# 모든 요소 삭제
items.clear()
print(f"clear() 후: {items}")

[VS Code 터미널 출력]

파이썬 리스트에서 remove, pop, del로 요소 삭제 예시

 


마무리하며

이번 시간에는 파이썬의 가장 기본적인 자료구조 중 하나인 **리스트(List)**에 대해 정의부터 생성, 요소 접근(인덱싱), 변경, 추가, 삭제까지 자세히 알아보았습니다. 리스트는 데이터를 순서대로 관리하고 동적으로 크기를 조절할 수 있어 거의 모든 파이썬 프로그램에서 광범위하게 사용됩니다.

이제 여러분은 파이썬에서 여러 데이터를 효과적으로 묶고 조작할 수 있는 강력한 도구를 얻게 되었습니다.

다음 포스팅에서는 리스트와 비슷하지만 중요한 차이점을 가진 또 다른 자료구조인 **튜플(Tuple)**과 그 불변성에 대해 알아보겠습니다.


궁금한 점이 있다면 언제든지 질문해주세요! 다음 포스팅에서 만나요!

반응형