Created at : 2024-09-02 11:29
Auther: Soo.Y
3. 데이터 구조 (Data Structures)
데이터 구조는 데이터를 조직화하고 저장하는 방식으로, 효율적인 데이터 처리를 가능하게 합니다. 파이썬에서는 다양한 기본 데이터 구조를 제공하며, 이를 통해 데이터를 효과적으로 관리할 수 있습니다. 이 섹션에서는 리스트, 튜플, 집합, 딕셔너리와 같은 기본적인 데이터 구조를 다룹니다.
3.1 리스트 (List)
리스트는 파이썬에서 가장 자주 사용되는 데이터 구조 중 하나로, 여러 개의 항목을 순서대로 저장할 수 있는 가변 길이 시퀀스입니다. 리스트는 대괄호 []
로 정의하며, 다양한 데이터 타입을 포함할 수 있습니다.
- 리스트 생성:
fruits = ["사과", "바나나", "체리"]
numbers = [1, 2, 3, 4, 5]
mixed = [1, "안녕하세요", 3.14, True]
- 리스트 요소 접근:
print(fruits[0]) # 첫 번째 요소: 사과
print(fruits[-1]) # 마지막 요소: 체리
- 리스트 슬라이싱:
print(numbers[1:4]) # 인덱스 1부터 3까지: [2, 3, 4]
print(numbers[:2]) # 처음부터 인덱스 1까지: [1, 2]
print(numbers[2:]) # 인덱스 2부터 끝까지: [3, 4, 5]
- 리스트 수정:
fruits[1] = "블루베리"
print(fruits) # 출력: ["사과", "블루베리", "체리"]
- 리스트에 요소 추가:
fruits.append("오렌지") # 리스트 끝에 요소 추가
print(fruits) # 출력: ["사과", "블루베리", "체리", "오렌지"]
fruits.insert(1, "바나나") # 인덱스 1에 요소 삽입
print(fruits) # 출력: ["사과", "바나나", "블루베리", "체리", "오렌지"]
- 리스트에서 요소 제거:
fruits.remove("체리") # 특정 요소 제거
print(fruits) # 출력: ["사과", "바나나", "블루베리", "오렌지"]
fruits.pop() # 마지막 요소 제거
print(fruits) # 출력: ["사과", "바나나", "블루베리"]
fruits.pop(2) # 인덱스 2의 요소 제거
print(fruits) # 출력: ["사과", "바나나", "오렌지"]
-
리스트 결합과 반복:
fruits += ["포도", "수박"] # 리스트 결합 print(fruits) # 출력: ["사과", "바나나", "오렌지", "포도", "수박"] repeated_list = [1, 2, 3] * 2 # 리스트 반복 print(repeated_list) # 출력: [1, 2, 3, 1, 2, 3]
-
리스트 정렬:
numbers = [5, 2, 9, 1, 5, 6] numbers.sort() # 오름차순 정렬 print(numbers) # 출력: [1, 2, 5, 5, 6, 9] numbers.sort(reverse=True) # 내림차순 정렬 print(numbers) # 출력: [9, 6, 5, 5, 2, 1]
3.2 튜플 (Tuple)
튜플은 리스트와 유사하지만, 수정할 수 없는(immutable) 데이터 구조입니다. 튜플은 소괄호 ()
로 정의하며, 데이터가 변경되지 않아야 하는 경우에 유용합니다.
-
튜플 생성:
fruits = ("사과", "바나나", "체리") numbers = (1, 2, 3, 4, 5) mixed = (1, "안녕하세요", 3.14, True)
-
튜플 요소 접근:
print(fruits[0]) # 첫 번째 요소: 사과 print(fruits[-1]) # 마지막 요소: 체리
-
튜플에서 요소 변경 불가: 튜플은 불변(immutable)이므로, 생성된 후에는 요소를 변경할 수 없습니다. 요소를 추가하거나 삭제하려고 하면 오류가 발생합니다.
# fruits[0] = "포도" # 오류 발생: 튜플은 수정 불가
-
튜플과 리스트 변환: 튜플과 리스트는 서로 변환할 수 있습니다.
fruits_list = list(fruits) # 튜플을 리스트로 변환 fruits_list.append("오렌지") fruits_tuple = tuple(fruits_list) # 리스트를 다시 튜플로 변환 print(fruits_tuple) # 출력: ("사과", "바나나", "체리", "오렌지")
-
튜플 언패킹: 튜플의 요소를 변수로 쉽게 할당할 수 있습니다.
a, b, c = fruits print(a, b, c) # 출력: 사과 바나나 체리
3.3 집합 (Set)
집합은 중복되지 않은 요소들의 모임을 나타내며, 순서가 없는 데이터 구조입니다. 집합은 중괄호 {}
로 정의하며, 수학적 집합 연산(교집합, 합집합, 차집합 등)을 수행할 수 있습니다.
-
집합 생성:
fruits = {"사과", "바나나", "체리"} numbers = {1, 2, 3, 4, 5}
-
집합의 특징:
- 집합은 중복된 요소를 허용하지 않습니다.
- 순서가 없기 때문에 인덱싱이 불가능합니다.
unique_numbers = {1, 2, 2, 3, 4, 4, 5} print(unique_numbers) # 출력: {1, 2, 3, 4, 5}
-
집합에 요소 추가 및 제거:
fruits.add("오렌지") # 요소 추가 print(fruits) # 출력: {"사과", "바나나", "체리", "오렌지"} fruits.remove("바나나") # 특정 요소 제거 print(fruits) # 출력: {"사과", "체리", "오렌지"}
-
집합 연산:
set_a = {1, 2, 3} set_b = {3, 4, 5} print(set_a | set_b) # 합집합: {1, 2, 3, 4, 5} print(set_a & set_b) # 교집합: {3} print(set_a - set_b) # 차집합: {1, 2} print(set_a ^ set_b) # 대칭 차집합: {1, 2, 4, 5}
3.4 딕셔너리 (Dictionary)
딕셔너리는 키-값 쌍을 저장하는 데이터 구조로, 해시맵이나 연관 배열과 유사합니다. 딕셔너리는 중괄호 {}
로 정의하며, 키를 통해 값을 빠르게 접근할 수 있습니다.
-
딕셔너리 생성:
student = { "이름": "홍길동", "나이": 20, "전공": "컴퓨터 공학" }
-
딕셔너리 요소 접근:
print(student["이름"]) # 출력: 홍길동 print(student.get("전공")) # 출력: 컴퓨터 공학
-
딕셔너리 요소 추가 및 수정:
student["학년"] = 2 # 요소 추가 print(student) # 출력: {"이름": "홍길동", "나이": 20, "전공": "컴퓨터 공학", "학년": 2} student["전공"] = "전자 공학" # 요소 수정 print(student) # 출력: {"이름": "홍길동", "나이": 20, "전공": "전자 공학", "학년": 2}
-
딕셔너리에서 요소 제거:
del student[“학년”] # 특정 키-값 쌍 제거 print(student) # 출력: {“이름”: “홍길동”, “나이”: 20, “전공”: “전자 공학”}
student.pop(“전공”) # pop()으로 요소 제거 print(student) # 출력: {“이름”: “홍길동”, “나이”: 20}
- **딕셔너리 순회**:
딕셔너리는 키와 값에 대해 반복문을 사용할 수 있습니다.
```python
for key, value in student.items():
print(f"{key}: {value}")
- 딕셔너리의 키, 값, 아이템:
print(student.keys()) # 출력: dict_keys(['이름', '나이']) print(student.values()) # 출력: dict_values([홍길동, 20]) print(student.items()) # 출력: dict_items([('이름', '홍길동'), ('나이', 20)])
3.5 데이터 구조의 활용
파이썬의 데이터 구조를 적절히 활용하면, 데이터를 보다 효율적으로 관리하고 처리할 수 있습니다. 상황에 맞는 데이터 구조를 선택하여 코드의 가독성을 높이고 성능을 향상시킬 수 있습니다.
- 리스트는 순서가 중요하고, 데이터의 추가와 삭제가 빈번한 경우에 적합합니다.
- 튜플은 데이터의 불변성을 보장해야 할 때 사용합니다.
- 집합은 중복을 허용하지 않으며, 수학적 집합 연산을 수행할 때 유용합니다.
- 딕셔너리는 키를 통해 데이터를 빠르게 조회해야 할 때 가장 효과적입니다.
이제 파이썬의 기본적인 데이터 구조에 대해 이해하게 되었습니다. 이들 구조를 활용하여 다양한 문제를 해결할 수 있습니다.