리스트와 딕셔너리
리스트(List)
- 정의: 순서가 있는 값들의 변경 가능한(mutable) 모임
- 특징:
- 다양한 데이터 타입(숫자, 문자열, 다른 리스트 등) 함께 저장 가능
- 요소들이 순서대로 저장되며, 이 순서 유지
- 요소의 추가, 삭제, 수정 자유
- 예시:
my_list = [1, "hello", 3.14, True, [10, 20]]
리스트 생성 방법
- 대괄호
[]사용: 가장 일반적인 방법empty_list = [](빈 리스트)numbers = [1, 2, 3, 4, 5]mixed_list = [10, "Python", 3.0]
list()함수 사용: 다른 순회 가능한(iterable) 객체(예: 문자열, 튜플,range)를 리스트로 변환string_to_list = list("hello")➡️['h', 'e', 'l', 'l', 'o']range_to_list = list(range(5))➡️[0, 1, 2, 3, 4]tuple_to_list = list((1, 2, 3))➡️[1, 2, 3]
- 빈 리스트 만들기:
my_list1 = []my_list2 = list()
리스트 인덱싱(Indexing)
- 정의: 리스트 내 특정 위치(인덱스)의 요소에 접근하는 방법
- 인덱스 규칙:
- 양수 인덱스: 맨 앞 요소부터
0으로 시작,1,2, ... 순으로 증가 - 음수 인덱스: 맨 뒤 요소부터
-1로 시작,-2,-3, ... 순으로 감소
- 양수 인덱스: 맨 앞 요소부터
- 사용법:
리스트이름[인덱스] - 예시:
fruits = ["사과", "바나나", "딸기", "포도", "오렌지"]
print(fruits[0]) # 결과: "사과" (첫 번째 요소)
print(fruits[2]) # 결과: "딸기" (세 번째 요소)
print(fruits[-1]) # 결과: "오렌지" (마지막 요소)
print(fruits[-3]) # 결과: "딸기" (뒤에서 세 번째 요소)
# fruits[5] # IndexError: list index out of range (존재하지 않는 인덱스 접근 시 오류)
리스트 슬라이싱(Slicing)
- 정의: 리스트의 특정 범위의 여러 요소를 새로운 리스트로 잘라내어 접근하는 방법
- 사용법:
리스트이름[start:stop:step]start: 슬라이싱 시작 인덱스 (포함). 생략 시 처음부터.stop: 슬라이싱 종료 인덱스 (미포함). 생략 시 끝까지.step: 인덱스 증가 간격. 생략 시1.
- 예시:
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(numbers[2:5]) # 결과: [2, 3, 4] (인덱스 2부터 4까지)
print(numbers[:3]) # 결과: [0, 1, 2] (처음부터 인덱스 2까지)
print(numbers[7:]) # 결과: [7, 8, 9] (인덱스 7부터 끝까지)
print(numbers[1:7:2]) # 결과: [1, 3, 5] (인덱스 1부터 6까지, 2씩 증가)
print(numbers[:]) # 결과: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] (전체 복사)
print(numbers[::-1]) # 결과: [9, 8, 7, 6, 5, 4, 3, 2, 1, 0] (역순으로)
리스트에 새 요소 추가
append(요소): 리스트의 맨 뒤에 새로운 요소 추가- 원본 리스트 직접 변경
- 예시:
my_list = [1, 2, 3]
my_list.append(4)
print(my_list) # 결과: [1, 2, 3, 4]
my_list.append([5, 6])
print(my_list) # 결과: [1, 2, 3, 4, [5, 6]] (리스트 자체가 요소로 추가)
insert(인덱스, 요소): 리스트의 특정 인덱스 위치에 새로운 요소 추가- 기존 요소들은 뒤로 밀림
- 원본 리스트 직접 변경
- 예시:
my_list = ["사과", "딸기", "포도"]
my_list.insert(1, "바나나") # 인덱스 1 위치에 "바나나" 추가
print(my_list) # 결과: ["사과", "바나나", "딸기", "포도"]
my_list.insert(0, "수박") # 맨 앞에 추가
print(my_list) # 결과: ["수박", "사과", "바나나", "딸기", "포도"]
리스트에서 요소 삭제
remove(값): 리스트에서 지정된 값과 일치하는 첫 번째 요소 삭제- 해당 값 없으면
ValueError발생 - 원본 리스트 직접 변경
- 예시:
my_list = [10, 20, 30, 20, 40]
my_list.remove(20) # 첫 번째 20 삭제
print(my_list) # 결과: [10, 30, 20, 40]
# my_list.remove(50) # ValueError: list.remove(x): x not in list
- 해당 값 없으면
pop(인덱스): 리스트의 특정 인덱스 위치의 요소를 삭제하고 그 요소 반환- 인덱스 생략 시 맨 마지막 요소 삭제 및 반환
- 원본 리스트 직접 변경
- 예시:
my_list = ["a", "b", "c", "d", "e"]
removed_element = my_list.pop(2) # 인덱스 2의 "c" 삭제 및 반환
print(my_list) # 결과: ["a", "b", "d", "e"]
print(removed_element) # 결과: "c"
last_element = my_list.pop() # 마지막 요소 "e" 삭제 및 반환
print(my_list) # 결과: ["a", "b", "d"]
print(last_element) # 결과: "e"
리스트 순서 바꾸기
sort(): 리스트 요소들을 오름차순으로 정렬 (문자열은 사전 순)reverse=True옵션 시 내림차순 정렬- 원본 리스트 직접 변경
- 예시:
numbers = [3, 1, 4, 1, 5, 9, 2]
numbers.sort()
print(numbers) # 결과: [1, 1, 2, 3, 4, 5, 9]
numbers.sort(reverse=True)
print(numbers) # 결과: [9, 5, 4, 3, 2, 1, 1]
reverse(): 리스트 요소들의 순서를 반대로 뒤집음- 원본 리스트 직접 변경
- 예시:
my_list = [1, "two", 3.0]
my_list.reverse()
print(my_list) # 결과: [3.0, "two", 1]
리스트 길이와 개수 세기
len(리스트): 리스트에 포함된 요소의 개수(길이) 반환 (내장 함수)- 예시:
my_list = [10, 20, 30]
print(len(my_list)) # 결과: 3
- 예시:
count(값): 리스트에서 특정 값이 몇 개 있는지 개수 반환- 예시:
numbers = [1, 2, 2, 3, 2, 4]
print(numbers.count(2)) # 결과: 3
- 예시:
딕셔너리(Dictionary)
- 정의: **키(Key)**와 **값(Value)**을 하나의 쌍으로 묶어 저장하는 자료구조
- 특징:
- 키(Key): 고유, 변경 불가능한(immutable) 자료형만 사용 가능 (예: 문자열, 숫자, 튜플)
- 값(Value): 어떤 데이터 타입이든 가능, 중복 가능
- Python 3.6 이하에서는 요소들의 순서 보장 안 되었으나 3.7부터 입력된 순서 유지
- 변경 가능(mutable): 키-값 쌍의 추가, 수 정, 삭제 가능
- 용도: 의미 있는 이름(키)으로 데이터 관리 시 유용 (예: 사람 정보 - 이름, 나이, 직업)
딕셔너리 생성 및 기본 조작 ⚙️
- 딕셔너리 생성: 중괄호
{}사용,키: 값형태로 쌍 구성empty_dict = {}person = {"name": "홍길동", "age": 30, "city": "서울"}scores = {101: 85, 102: 92, 103: 78}
- 값 접근 (Key 사용):
딕셔너리이름[키]print(person["name"])➡️"홍길동"print(scores[102])➡️92- 존재하지 않는 키로 접근 시
KeyError발생.get()메소드 사용 권장.print(person.get("job"))➡️None(키 없으면None반환)print(person.get("job", "정보 없음"))➡️"정보 없음"(기본값 지정 가능)
딕셔너리 수정 및 삭제
- 새 Key-Value 쌍 추가:
딕셔너리이름[새로운키] = 새로운값person["job"] = "개발자"print(person)➡️{'name': '홍길동', 'age': 30, 'city': '서울', 'job': '개발자'}
- 기존 값 수정:
딕셔너리이름[기존키] = 수정된값person["age"] = 31print(person)➡️{'name': '홍길동', 'age': 31, 'city': '서울', 'job': '개발자'}
- 특정 Key-Value 쌍 삭제 (
del):del 딕셔너리이름[키]del person["city"]print(person)➡️{'name': '홍길동', 'age': 31, 'job': '개발자'}