리스트는 파이썬에서 가장 유용한 데이터 구조 중 하나로, 순서가 있으며 가변적인 컬렉션입니다. 리스트는 다양한 타입의 객체를 포함할 수 있으며, 인덱싱, 슬라이싱, 수정, 추가, 삭제 등 다양한 연산을 지원합니다.
1. 리스트 생성 방법
리스트는 대괄호 []로 정의하거나, list() 함수를 사용해 생성할 수 있습니다.
# 빈 리스트 생성
empty_list = []
# 값이 있는 리스트
numbers = [1, 2, 3, 4]
mixed_data = ['apple', 42, True, [1, 2]]
# range 함수를 통해 숫자 리스트 생성
sequence = list(range(5)) # [0, 1, 2, 3, 4]
2. 리스트 요소 접근 및 슬라이싱
리스트는 인덱스 기반으로 접근 가능하며, 음수 인덱스로 뒤에서부터 참조할 수 있습니다. 슬라이싱은 특정 범위의 요소를 추출하는 데 사용됩니다.
data = ['a', 'b', 'c', 'd', 'e']
print(data[0]) # 'a'
print(data[-1]) # 'e'
print(data[1:4]) # ['b', 'c', 'd']
print(data[:3]) # ['a', 'b', 'c']
print(data[::2]) # ['a', 'c', 'e'] (간격 2로 추출)
3. 리스트 조작 메서드
append(item): 리스트 끝에 항목 추가insert(index, item): 지정된 위치에 항목 삽입remove(item): 첫 번째로 일치하는 항목 제거pop(index): 지정된 인덱스의 항목 제거하고 반환extend(iterable): 다른 시퀀스의 모든 요소를 리스트에 추가sort(): 원본 리스트를 정렬 (오름차순)reverse(): 리스트 순서를 뒤집음
fruits = ['banana', 'apple']
fruits.append('orange') # ['banana', 'apple', 'orange']
fruits.insert(1, 'grape') # ['banana', 'grape', 'apple', 'orange']
fruits.remove('apple') # ['banana', 'grape', 'orange']
popped = fruits.pop() # 'orange' 반환, 리스트: ['banana', 'grape']
fruits.extend(['kiwi', 'mango']) # ['banana', 'grape', 'kiwi', 'mango']
fruits.sort() # ['banana', 'grape', 'kiwi', 'mango']
fruits.reverse() # ['mango', 'kiwi', 'grape', 'banana']
4. 리스트 연산자
리스트는 +와 * 연산자를 지원합니다.
a = [1, 2]
b = [3, 4]
print(a + b) # [1, 2, 3, 4] - 병합
print(a * 3) # [1, 2, 1, 2, 1, 2] - 반복
print(2 in a) # True - 포함 여부 확인
5. 내장 함수 사용
다음과 같은 함수는 리스트에 적용 가능합니다.
| 함수 | 설명 |
|---|---|
len(lst) |
리스트 길이 반환 |
max(lst) |
최댓값 반환 (숫자 또는 문자열 기준) |
min(lst) |
최솟값 반환 |
sum(lst) |
숫자 리스트의 합계 반환 |
sorted(lst) |
정렬된 새 리스트 반환 (원본 유지) |
enumerate(lst) |
인덱스와 값을 함께 반복 가능 |
scores = [85, 92, 78, 96]
print(max(scores)) # 96
print(sum(scores)) # 351
for idx, val in enumerate(scores):
print(f"{idx}: {val}")
6. 중첩 리스트 및 깊은 복사
리스트 안에 또 다른 리스트가 포함될 수 있으며, 이 경우 단순 할당은 얕은 복사가 됩니다. 깊은 복사를 원한다면 copy.deepcopy()를 사용해야 합니다.
nested = [['a', 'b'], ['c', 'd']]
shallow_copy = nested[:] # 얕은 복사
deep_copy = copy.deepcopy(nested) # 깊은 복사
7. 리스트 복제 및 슬라이싱
슬라이싱은 리스트의 일부를 복제하는 데 매우 효과적입니다.
original = [1, 2, 3, 4, 5]
copy_slice = original[:] # 전체 복제
partial = original[1:4] # [2, 3, 4]
reversed_list = original[::-1] # [5, 4, 3, 2, 1]
8. 리스트 반복 및 조건 처리
리스트를 반복하면서 조건에 따라 필터링할 수 있습니다.
names = ['Alice', 'Bob', 'Anna', 'Charlie']
filtered = [name for name in names if name.startswith('A')]
print(filtered) # ['Alice', 'Anna']
9. 실습 예제: 감성 텍스트 필터링
감성어(예: "악", "좋아")를 포함한 문장을 입력받아, 해당 단어를 ***로 치환하는 프로그램.
sensitive_words = ["악", "지저분", "싫어"]
text = input("내용을 입력하세요: ").strip()
result = text
for word in sensitive_words:
result = result.replace(word, "***")
print(result)
10. 리스트를 통한 다차원 데이터 처리
리스트를 이용해 행렬처럼 데이터를 다룰 수 있습니다.
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
# 특정 행 출력
print(matrix[1]) # [4, 5, 6]
# 특정 열 추출
column = [row[2] for row in matrix] # [3, 6, 9]