소개
Python 리스트 (List) 와 튜플 (Tuple) 에 대한 실습 랩 (hands-on lab) 에 오신 것을 환영합니다. 리스트는 Python 에서 가장 기본적이고 다재다능한 데이터 구조 중 하나로, 순서가 있는 항목들의 모음을 저장할 수 있게 해줍니다. 튜플은 이와 유사하지만 중요한 차이점이 있는데, 바로 '불변성 (immutable)'을 가진다는 점입니다.
본 랩을 통해 리스트를 생성하고, 요소에 접근 및 조작하며, 정렬 (sorting) 및 반복 (looping) 과 같은 일반적인 작업을 수행하는 방법을 배우게 될 것입니다. 또한 튜플을 탐색하고 리스트 대신 튜플을 사용해야 하는 경우를 이해하게 될 것입니다.
이 랩 환경은 사전 구성된 WebIDE 입니다. 이 랩에 필요한 모든 파일은 /home/labex/project 디렉토리에 생성되어 있습니다. 이제 시작하겠습니다.
리스트 요소 접근하기
이 단계에서는 인덱스 (index) 를 사용하여 리스트에서 요소를 검색하는 방법과 슬라이싱 (slicing) 을 사용하여 하위 리스트 (sublist) 를 추출하는 방법을 배웁니다. 리스트는 대괄호 [] 안에 항목들이 순서대로 모여 있는 컬렉션입니다.
먼저, 왼쪽 파일 탐색기에서 step1_access.py 파일을 엽니다. 이 파일에 코드를 작성할 것입니다.
참고: WebIDE(VS Code 와 유사) 사용이 익숙하지 않다면, 이 랩에서 먼저 학습하십시오.
인덱스를 사용한 값 가져오기
리스트 요소는 0 부터 시작하는 인덱스를 사용하여 접근합니다. 즉, 첫 번째 요소는 인덱스 0에 있습니다.
리스트를 생성하고 첫 번째 요소를 접근하기 위해 step1_access.py에 다음 코드를 추가하십시오:
## step1_access.py
furniture = ['table', 'chair', 'rack', 'shelf']
## 첫 번째 요소 접근 (인덱스 0)
print(furniture[0])
스크립트를 실행하려면 WebIDE 에서 터미널을 열고 다음 명령을 실행하십시오:
python3 /home/labex/project/step1_access.py
콘솔에 리스트의 첫 번째 요소가 출력되는 것을 볼 수 있습니다.
출력:
table
음수 인덱스
리스트 끝에서부터 요소를 접근하기 위해 음수 인덱스를 사용할 수도 있습니다. 인덱스 -1은 마지막 요소를, -2는 끝에서 두 번째 요소를 나타냅니다.
마지막 요소를 접근하도록 step1_access.py를 수정하십시오:
## step1_access.py
furniture = ['table', 'chair', 'rack', 'shelf']
## 마지막 요소 접근 (인덱스 -1)
print(furniture[-1])
스크립트를 다시 실행하십시오:
python3 /home/labex/project/step1_access.py
출력:
shelf
슬라이스를 사용한 하위 리스트 가져오기
슬라이싱은 [start:end] 구문을 사용하여 하위 리스트를 가져올 수 있게 해줍니다. start 인덱스는 포함되고, end 인덱스는 포함되지 않습니다.
연습해 봅시다. 확인 작업 (verification task) 을 위해, step1_access.py를 수정하여 리스트를 생성하고 그중 일부를 슬라이스하여 출력하십시오. 기존 내용을 다음 코드로 대체하십시오:
## step1_access.py
furniture = ['table', 'chair', 'rack', 'shelf']
## 인덱스 1 부터 인덱스 3 직전까지의 하위 리스트 가져오기
sublist = furniture[1:3]
print(sublist)
스크립트를 실행하여 결과를 확인하십시오:
python3 /home/labex/project/step1_access.py
출력:
['chair', 'rack']
전체 슬라이스 [:]를 사용하여 리스트의 복사본을 만들 수도 있습니다. 원본 리스트에 대한 수정은 복사본에 영향을 미치지 않습니다.
## step1_access.py
spam = ['cat', 'bat', 'rat', 'elephant']
spam2 = spam[:] ## 얕은 복사본 (shallow copy) 생성
spam.append('dog')
print(spam)
print(spam2)
스크립트를 실행하십시오:
python3 /home/labex/project/step1_access.py
출력:
['cat', 'bat', 'rat', 'elephant', 'dog']
['cat', 'bat', 'rat', 'elephant']
['chair', 'rack'] 슬라이스를 성공적으로 출력한 후, Verify 버튼을 클릭하여 다음 단계로 진행하십시오.
리스트 수정 및 조작하기
이 단계에서는 리스트 내용을 관리하고 수정하는 방법을 탐구합니다. 여기에는 값 변경, 리스트 결합, 새 요소 추가 등이 포함됩니다.
시작하려면 step2_modify.py 파일을 엽니다.
len()을 사용한 리스트 길이 확인
len() 함수는 리스트에 포함된 항목의 개수를 반환합니다.
step2_modify.py에 다음 코드를 추가합니다:
## step2_modify.py
furniture = ['table', 'chair', 'rack', 'shelf']
print(len(furniture))
스크립트를 실행합니다:
python3 /home/labex/project/step2_modify.py
출력:
4
인덱스를 사용한 값 변경
인덱스에 새 값을 할당하여 리스트의 요소를 변경할 수 있습니다.
## step2_modify.py
furniture = ['table', 'chair', 'rack', 'shelf']
furniture[0] = 'desk' ## 첫 번째 요소 변경
print(furniture)
스크립트를 실행합니다:
python3 /home/labex/project/step2_modify.py
출력:
['desk', 'chair', 'rack', 'shelf']
연결 (Concatenation) 및 반복 (Replication)
+ 연산자 (연결) 를 사용하여 두 리스트를 결합하거나, * 연산자 (반복) 를 사용하여 리스트 내용을 반복할 수 있습니다.
## step2_modify.py
list1 = [1, 2, 3]
list2 = ['A', 'B', 'C']
combined_list = list1 + list2
print(combined_list)
replicated_list = ['X'] * 3
print(replicated_list)
스크립트를 실행합니다:
python3 /home/labex/project/step2_modify.py
출력:
[1, 2, 3, 'A', 'B', 'C']
['X', 'X', 'X']
append() 및 insert()를 사용한 값 추가
append()메서드는 항목을 리스트의 끝에 추가합니다.insert()메서드는 지정된 인덱스에 항목을 추가합니다.
확인 작업을 위해 이러한 연산을 결합해 보겠습니다. step2_modify.py의 내용을 다음 코드로 대체합니다. 이 스크립트는 리스트를 생성하고, 끝에 요소를 추가하고, 처음에 다른 요소를 삽입합니다.
## step2_modify.py
furniture = ['table', 'chair', 'rack', 'shelf']
## 리스트 끝에 'bed' 추가
furniture.append('bed')
## 리스트 시작 부분 (인덱스 0) 에 'desk' 삽입
furniture.insert(0, 'desk')
print(furniture)
스크립트를 실행하여 최종 수정된 리스트를 확인합니다:
python3 /home/labex/project/step2_modify.py
출력:
['desk', 'table', 'chair', 'rack', 'shelf', 'bed']
스크립트가 올바른 출력을 생성하면 Verify를 클릭하십시오.
값 제거 및 정렬하기
이 단계에서는 리스트에서 항목을 제거하는 다양한 방법과 리스트 내용을 정렬하는 방법을 배웁니다.
step3_remove.py 파일을 여십시오.
값 제거하기
Python 은 리스트에서 항목을 제거하는 여러 방법을 제공합니다:
del문: 특정 인덱스의 항목을 제거합니다.remove()메서드: 특정 값의 첫 번째 발생 항목을 제거합니다.pop()메서드: 특정 인덱스의 항목을 제거하고 반환합니다 (인덱스를 지정하지 않으면 마지막 항목을 제거하고 반환합니다).
이들이 어떻게 작동하는지 살펴보겠습니다. step3_remove.py에 다음을 추가합니다:
## step3_remove.py
furniture = ['table', 'chair', 'rack', 'shelf']
del furniture[2] ## 'rack' 제거
print(furniture)
furniture.remove('chair') ## 'chair' 제거
print(furniture)
스크립트를 실행합니다:
python3 /home/labex/project/step3_remove.py
출력:
['table', 'chair', 'shelf']
['table', 'shelf']
sort()을 사용한 값 정렬
sort() 메서드는 리스트를 제자리에서 (in place) 정렬합니다. 기본적으로 오름차순으로 정렬됩니다.
## step3_remove.py
numbers = [2, 5, 3.14, 1, -7]
numbers.sort()
print(numbers)
letters = ['a', 'z', 'A', 'Z']
letters.sort(key=str.lower) ## 대소문자 구분 없는 정렬
print(letters)
스크립트를 실행합니다:
python3 /home/labex/project/step3_remove.py
출력:
[-7, 1, 2, 3.14, 5]
['a', 'A', 'z', 'Z']
확인 작업을 위해 리스트를 생성하고, 특정 항목을 제거한 다음, 나머지 항목들을 정렬해야 합니다. step3_remove.py의 내용을 다음으로 대체합니다:
## step3_remove.py
furniture = ['table', 'chair', 'rack', 'shelf']
## 항목 'rack' 제거
furniture.remove('rack')
## 리스트를 알파벳순으로 정렬
furniture.sort()
print(furniture)
스크립트를 실행하여 결과를 확인합니다:
python3 /home/labex/project/step3_remove.py
출력:
['chair', 'shelf', 'table']
스크립트가 리스트를 올바르게 제거하고 정렬한 후, Verify를 클릭하십시오.
반복문 및 고급 기법
이 단계에서는 리스트를 반복하는 방법과 매우 유용하지만 고급인 리스트 기법들을 마스터하게 됩니다.
이 섹션을 위해 step4_loop.py 파일을 엽니다.
for를 사용한 반복
for 루프는 리스트 항목들을 반복하는 표준 방법입니다.
## step4_loop.py
furniture = ['table', 'chair', 'rack', 'shelf']
for item in furniture:
print(item)
스크립트를 실행합니다:
python3 /home/labex/project/step4_loop.py
출력:
table
chair
rack
shelf
enumerate()를 사용한 인덱스와 값 얻기
반복 중에 인덱스와 값 모두가 필요하다면, enumerate() 함수를 사용합니다.
## step4_loop.py
furniture = ['table', 'chair', 'rack', 'shelf']
for index, item in enumerate(furniture):
print(f'index: {index} - item: {item}')
스크립트를 실행합니다:
python3 /home/labex/project/step4_loop.py
출력:
index: 0 - item: table
index: 1 - item: chair
index: 2 - item: rack
index: 3 - item: shelf
in 및 not in 연산자
이 연산자들을 사용하면 값이 리스트 내에 존재하는지 확인할 수 있습니다.
## step4_loop.py
furniture = ['table', 'chair', 'rack', 'shelf']
print('rack' in furniture)
print('bed' not in furniture)
스크립트를 실행합니다:
python3 /home/labex/project/step4_loop.py
출력:
True
True
zip()을 사용한 여러 리스트 반복
zip() 함수는 여러 리스트를 병렬로 처리하는 데 완벽합니다. 이 함수는 각 리스트의 요소를 쌍으로 묶어줍니다.
확인 작업을 위해 zip()을 사용하여 두 리스트를 결합할 것입니다. step4_loop.py의 내용을 다음 코드로 대체합니다. 이 코드는 가구 항목과 해당 가격을 반복하면서 각 쌍에 대해 형식화된 문자열을 출력합니다.
## step4_loop.py
furniture = ['table', 'chair', 'rack', 'shelf']
price = [100, 50, 80, 40]
for item, amount in zip(furniture, price):
print(f'The {item} costs ${amount}')
스크립트를 실행하여 결합된 출력을 확인합니다:
python3 /home/labex/project/step4_loop.py
출력:
The table costs $100
The chair costs $50
The rack costs $80
The shelf costs $40
스크립트가 올바르게 작동하면 Verify를 클릭하십시오.
튜플 이해하기
마지막 단계에서는 튜플 (tuple) 데이터 유형에 대해 배웁니다. 튜플은 리스트와 유사하지만 **불변 (immutable)**입니다. 즉, 생성된 후에는 내용을 변경할 수 없습니다.
step5_tuple.py 파일을 여십시오.
튜플 데이터 유형
튜플은 대괄호 ([]) 대신 소괄호 (()) 로 정의됩니다. 불변이기 때문에 튜플이 생성된 후에는 요소를 변경하거나 추가하거나 제거할 수 없습니다. 이로 인해 메모리 효율성이 더 높고 변경되어서는 안 되는 데이터에 유용합니다.
리스트와 마찬가지로 인덱스와 슬라이싱을 사용하여 튜플 요소에 접근할 수 있습니다.
## step5_tuple.py
furniture = ('table', 'chair', 'rack', 'shelf')
## 요소 접근
print(furniture[0])
## 슬라이싱
print(furniture[1:3])
## 길이 확인
print(len(furniture))
스크립트를 실행합니다:
python3 /home/labex/project/step5_tuple.py
출력:
table
('chair', 'rack')
4
튜플을 수정하려고 하면 Python 은 TypeError를 발생시킵니다. 예를 들어, furniture[0] = 'desk'는 오류를 유발합니다.
list()와 tuple() 간 변환
list() 및 tuple() 생성자 함수를 사용하여 리스트와 튜플 간에 쉽게 변환할 수 있습니다.
확인 작업을 위해 리스트를 튜플로 변환할 것입니다. step5_tuple.py의 내용을 다음 코드로 대체합니다:
## step5_tuple.py
## 항목 리스트
my_list = ['cat', 'dog', 5]
## 리스트를 튜플로 변환
my_tuple = tuple(my_list)
print(my_tuple)
스크립트를 실행하여 결과 튜플을 확인합니다:
python3 /home/labex/project/step5_tuple.py
출력:
('cat', 'dog', 5)
수정이 필요할 경우 튜플을 다시 리스트로 변환할 수도 있습니다:
## step5_tuple.py
my_tuple = ('cat', 'dog', 5)
my_list = list(my_tuple)
print(my_list)
스크립트를 실행합니다:
python3 /home/labex/project/step5_tuple.py
출력:
['cat', 'dog', 5]
스크립트가 리스트를 튜플로 성공적으로 변환하고 출력하면, Verify를 클릭하여 실습을 완료하십시오.
요약
실습을 완료하신 것을 축하드립니다! Python 의 핵심 데이터 구조인 리스트 (list) 와 튜플 (tuple) 에 대한 탄탄한 이해를 얻으셨습니다.
다음과 같은 내용을 학습했습니다:
- 리스트를 생성하고 양수 및 음수 인덱스를 사용하여 요소에 접근하는 방법.
- 슬라이싱을 사용하여 하위 리스트를 추출하는 방법.
- 값을 변경하고,
append()및insert()로 요소를 추가하며,del,remove(),pop()으로 요소를 제거하여 리스트를 수정하는 방법. sort()메서드를 사용하여 리스트를 제자리에서 (in-place) 정렬하는 방법.for루프,enumerate(),zip()을 사용하여 리스트를 효과적으로 반복하는 방법.- 튜플의 불변성 (immutability) 을 이해하고 리스트와 튜플 간에 변환하는 방법.
이러한 기술은 모든 Python 프로그래머에게 기본이 되며 향후 프로젝트에서 매우 유용할 것입니다.



