본문 바로가기

Python

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

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

 

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

이번 시간부터는 파이썬에서 데이터를 효율적으로 저장하고 관리하는 데 사용되는 핵심적인 **자료구조(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)**과 그 불변성에 대해 알아보겠습니다.


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

반응형