728x90
반응형
1. 리스트의 정의 및 생성
1.1 리스트의 특성
- Python에서 리스트는 순서가 있는(ordered) 컬렉션 데이터 타입
- 리스트의 가장 중요한 특징
- 1. 수정 가능(Mutable): 생성 후에도 요소를 추가, 삭제, 변경할 수 있습니다.
- 2. 중복 허용: 동일한 값을 가진 요소들을 여러 개 포함할 수 있습니다.
- 3. 다양한 데이터 타입 허용: 정수(integer), 불리언(Boolean), 문자열(string) 등 서로 다른 데이터 타입을 한 리스트 안에 담을 수 있습니다.
1.2 리스트 생성 방법
- 리스트는 **대괄호([])**를 사용하여 생성하며, 원하는 각 요소를 쉼표(comma)로 구분하여 넣습니다.
my_list = ["banana", "cherry", "apple"] # 예시
또한, list() 내장 함수를 사용하여 빈 리스트를 생성 가능
my_list_temp = list()
print(my_list_temp) # []
2. 요소 접근 및 반복 (Indexing and Iteration)
2.1 인덱스를 통한 접근
- 리스트의 요소에 접근하려면 인덱스를 사용
- Python의 인덱스는 0부터 시작한다 (0이 첫 번째 항목).
item = my_list[0]
print(item) # "banana"
- 음수 인덱스를 사용하면 리스트의 끝에서부터 요소를 참조 (-1은 리스트의 가장 마지막 항목)
item = my_list[-1]
print(item) # "apple"
- 주의: 리스트의 범위를 벗어난 인덱스를 지정하면 IndexError: list index out of range 예외가 발생합니다.
my_list[10] # indexError
2.2 반복 및 포함 여부 확인
- 리스트의 모든 요소를 순회하려면 간단히 for 루프를 사용
for item in my_list:
print(item)
- 특정 항목이 리스트 안에 포함되어 있는지 확인하려면 if와 in 키워드를 사용한 매우 단순한 구문을 사용합니다.
if "banana" in my_list:
print("Yes") # 결과
3. 리스트를 위한 유용한 메서드
- 리스트의 크기를 확인하거나 요소를 추가 및 제거하는 다양한 유용한 메서드가 있습니다.
|
메서드
|
기능
|
설명
|
|
len(my_list)
|
길이 확인
|
리스트에 있는 요소의 개수를 반환합니다.
|
|
my_list.append(item)
|
요소 추가
|
리스트의 **가장 마지막(끝)**에 새 항목을 삽입합니다.
|
|
my_list.insert(idx, item)
|
특정 위치 삽입
|
지정된 인덱스(idx)에 항목(item)을 삽입합니다.
|
|
my_list.pop()
|
마지막 요소 제거 및 반환
|
리스트의 마지막 항목을 반환하고 리스트에서 제거합니다.
|
|
my_list.remove(item)
|
특정 값 제거
|
리스트에서 지정된 **특정 요소(값)**를 제거합니다. 항목이 리스트에 없으면 ValueError가 발생합니다.
|
|
my_list.clear()
|
모든 요소 제거
|
리스트의 모든 요소를 제거하여 빈 리스트로 만듭니다.
|
|
my_list.reverse()
|
순서 뒤집기
|
리스트의 순서를 제자리에서(in place) 뒤집습니다.
|
4. 정렬 및 리스트 병합
4.1 정렬 (Sorting)
- sort() 메서드를 사용하면 리스트를 오름차순으로 정렬할 수 있습니다.
- 주의: sort() 메서드는 **원본 리스트를 직접 변경(in place sorting)**합니다.
- 원본 리스트를 유지하면서 정렬된 새로운 리스트를 만들고 싶다면, **내장 함수 sorted()**를 사용해야
- sorted() 함수는 원본 리스트를 인수로 받아 정렬된 새 리스트를 반환하며, 원본 리스트는 그대로 유지
# 원본 리스트
numbers = [5, 3, 8, 1, 2]
# sort() → 원본 리스트를 직접 변경 (in-place sorting)
numbers.sort()
print("sort() 결과:", numbers)
## 출력: sort() 결과: [1, 2, 3, 5, 8]
# 원본 리스트를 다시 초기화
numbers = [5, 3, 8, 1, 2]
# sorted() → 정렬된 새로운 리스트를 반환 (원본 유지)
sorted_numbers = sorted(numbers)
print("sorted() 결과:", sorted_numbers)
## 출력: sorted() 결과: [1, 2, 3, 5, 8]
print("원본 리스트:", numbers)
## 출력: 원본 리스트: [5, 3, 8, 1, 2]
4.2 리스트 생성 및 연결
- 동일한 요소를 여러 번 반복하여 새 리스트를 만들려면 곱하기 연산자(*)를 사용
- 두 리스트를 합치려면 더하기 연산자(+)를 사용하여 쉽게 연결
# 곱하기(*)를 사용한 리스트 반복
repeated = [0] * 5
print("리스트 반복:", repeated)
## 출력: 리스트 반복: [0, 0, 0, 0, 0]
# 더하기(+)를 사용한 리스트 연결
list1 = [1, 2, 3]
list2 = [4, 5]
combined = list1 + list2
print("리스트 연결:", combined)
## 출력: 리스트 연결: [1, 2, 3, 4, 5]
5. 슬라이싱 (Slicing)
- 슬라이싱은 콜론(:)을 사용하여 리스트의 부분집합(sub parts)에 접근하는 매우 유용한 방법입니다.
- 슬라이싱 구문은 [start:stop:step] 형식으로 지정합니다.
- start 인덱스를 지정하지 않으면 리스트의 처음부터 시작합니다.
- stop 인덱스를 지정하지 않으면 리스트의 끝까지 갑니다.
- 가장 중요한 점은 stop 인덱스에 해당하는 항목은 결과에 포함되지 않고 제외(excluded)된다는 것입니다.
- step 인덱스를 지정하여 건너뛰면서 항목을 선택할 수 있으며, 기본값은 1입니다. 예를 들어, step을 2로 설정하면 매번 두 번째 항목을 취합니다.
- 유용한 트릭: **음수 step 인덱스(-1)**를 사용하면 리스트의 순서를 완전히 뒤집을 수 있음
nums = [10, 20, 30, 40, 50, 60]
# 기본 슬라이싱 [start:stop]
print("nums[1:4]:", nums[1:4])
## 출력: nums[1:4]: [20, 30, 40] (인덱스 4는 제외됨)
# 처음부터 특정 인덱스까지
print("nums[:3]:", nums[:3])
## 출력: nums[:3]: [10, 20, 30]
# 특정 인덱스부터 끝까지
print("nums[3:]:", nums[3:])
## 출력: nums[3:]: [40, 50, 60]
# step 지정 (2칸씩 건너뛰기)
print("nums[::2]:", nums[::2])
## 출력: nums[::2]: [10, 30, 50]
# 음수 step 사용 (리스트 뒤집기)
print("nums[::-1]:", nums[::-1])
## 출력: nums[::-1]: [60, 50, 40, 30, 20, 10]
6. 리스트 복사 (Copying)의 중요성
- 리스트를 다룰 때 **복사(copying)**는 매우 조심해야 하는 부분입니다.
6.1 단순 할당의 위험성
- 단순히 = 연산자를 사용하여 할당하면 (예: copy = original), 두 변수는 메모리 내 동일한 리스트를 참조하게 됩니다.
- 이 경우, 사본(copy)을 수정하면 원본 리스트도 함께 수정됩니다. 이는 두 리스트가 메모리 내 같은 객체를 가리키고 있기 때문입니다.
original = [1, 2, 3]
copy = original # 단순 할당 → 같은 객체 참조
copy[0] = 99
print("copy 수정 후 original:", original)
## 출력: copy 수정 후 original: [99, 2, 3] (같이 바뀜!)
6.2 실제 복사본 만들기 (Actual Copy)
- 원본과 독립적인 실제 복사본을 만들려면 다음 세 가지 방법 중 하나를 사용해야 합니다:
- 1. .copy() 메서드 사용: new_list = original.copy().
- 2. list() 함수 사용: new_list = list(original).
- 3. 전체 슬라이싱 사용: new_list = original[:] (시작부터 끝까지 슬라이싱).
original = [1, 2, 3]
# 1. .copy() 메서드
copy1 = original.copy()
copy1[0] = 99
print(".copy() 사용:", original, copy1)
## 출력: .copy() 사용: [1, 2, 3] [99, 2, 3]
# 2. list() 함수
copy2 = list(original)
copy2[1] = 88
print("list() 사용:", original, copy2)
## 출력: list() 사용: [1, 2, 3] [1, 88, 3]
# 3. 슬라이싱 [:]
copy3 = original[:]
copy3[2] = 77
print("슬라이싱 사용:", original, copy3)
## 출력: 슬라이싱 사용: [1, 2, 3] [1, 2, 77]
7. 고급 기법: 리스트 컴프리헨션 (List Comprehension)
- 리스트 컴프리헨션은 기존 리스트로부터 새로운 리스트를 단 한 줄의 코드로 생성하는 빠르고 우아한(elegant) 고급 기술입니다.
- 숫자 리스트의 모든 요소를 제곱한 새 리스트를 만들 때 유용합니다.
기본 구문: 리스트 컴프리헨션은 대괄호 안에 [표현식 for 항목 in 리스트] 형식으로 작성됩니다. 반복(iterating)과 마찬가지로, 항목 변수 이름은 자유롭게 지정할 수 있습니다.
# 예: 모든 요소 제곱
squared_list = [i * i for i in original_list]
728x90
반응형
'프로그래밍 > Python' 카테고리의 다른 글
| [파이썬 / 기본] String " " (0) | 2025.10.19 |
|---|---|
| [파이썬 / 기본] Set {} 집합 (0) | 2025.10.17 |
| [파이썬 / 기본] Dictionary {} (0) | 2025.10.16 |
| [파이썬 / 기본] Tuple () (0) | 2025.10.15 |
| [SWEA] 파이썬 SW문제해결 기본 - List1 (1) | 2023.09.24 |