나혼자 코딩
Python의 주요 데이터 구조: 리스트, 튜플, 딕셔너리, 집합 본문
Python에서는 데이터를 효율적으로 저장하고 관리하기 위해 다양한 내장 데이터 구조를 제공합니다. 특히, 리스트(List), 튜플(Tuple), 딕셔너리(Dictionary), 집합(Set)은 Python에서 가장 많이 활용되는 데이터 구조입니다. 각 구조의 특성과 활용법을 이해하면 보다 효율적인 코드 작성을 할 수 있습니다.
1. 리스트(List)
리스트는 Python에서 가장 많이 사용하는 데이터 구조로, 순서가 있는 가변(mutable) 자료형입니다. 즉, 요소의 추가, 삭제, 변경이 가능합니다. 또한, 데이터 분석과 알고리즘 구현에서 필수적인 자료형으로 활용됩니다.
1-1. 리스트 생성 및 기본 연산
# 리스트 생성
numbers = [1, 2, 3, 4, 5]
names = ["Alice", "Bob", "Charlie"]
# 리스트 요소 접근 (인덱싱)
print(numbers[0]) # 출력: 1
print(names[-1]) # 출력: Charlie
# 리스트 슬라이싱 (부분 데이터 추출)
print(numbers[1:4]) # 출력: [2, 3, 4]
1-2. 리스트 주요 메서드
(1) append()
append()
메서드는 리스트의 끝에 새로운 요소를 추가합니다.
numbers = [1, 2, 3]
numbers.append(4)
print(numbers) # 출력: [1, 2, 3, 4]
(2) insert()
insert()
메서드는 특정 인덱스에 요소를 삽입합니다.
numbers = [1, 2, 4]
numbers.insert(2, 3) # 첫번째 값이 인덱스, 두번째 값이 데이터
print(numbers) # 출력: [1, 2, 3, 4]
(3) remove()
remove()
메서드는 리스트에서 특정 값을 찾아 제거합니다.
numbers = [1, 2, 3, 4]
numbers.remove(2)
print(numbers) # 출력: [1, 3, 4]
(4) pop()
pop()
메서드는 리스트의 마지막 요소를 제거하고 반환합니다.
numbers = [1, 2, 3, 4]
popped_value = numbers.pop()
print(popped_value) # 출력: 4
print(numbers) # 출력: [1, 2, 3]
(5) len()
len()
함수는 리스트의 길이를 반환합니다.
numbers = [1, 2, 3, 4]
print(len(numbers)) # 출력: 4
- 종합 예시 :
# 요소 추가 및 삽입
numbers.append(6) # 리스트 끝에 추가
numbers.insert(2, 10) # 특정 위치에 추가
# 요소 삭제
del numbers[1] # 특정 인덱스 요소 삭제
numbers.remove(10) # 특정 값 삭제
pop_value = numbers.pop() # 마지막 요소 반환 후 삭제
# 리스트 길이 확인
print(len(numbers))
1-3. 리스트 활용 예제
# 리스트 컴프리헨션 활용 (조건을 만족하는 요소 필터링)
squares = [x**2 for x in numbers if x % 2 == 0]
print(squares) # 짝수의 제곱 리스트 출력
리스트는 다른 프로그래밍 언어의 배열과 유사한 기능을 하며, 반복적인 데이터 처리를 위한 핵심적인 역할을 합니다.
2. 튜플(Tuple)
튜플은 리스트와 유사하지만 불변(immutable)한 자료형입니다. 즉, 생성된 이후 값을 변경할 수 없습니다. 데이터 보호가 중요한 경우 튜플을 사용하면 메모리 사용량이 줄고, 코드의 안정성이 향상됩니다.
2-1. 튜플 생성 및 접근
# 튜플 생성
fruits = ("사과", "바나나", "오렌지")
# 튜플 요소 접근
print(fruits[0]) # 출력: 사과
# 튜플은 불변하므로 값 변경 불가
# fruits[0] = "포도" # 오류 발생
2-2. 튜플 활용 예제
# 여러 개의 값을 반환하는 함수
def get_coordinates():
return (37.7749, -122.4194) # 위도, 경도 반환
latitude, longitude = get_coordinates()
print(latitude, longitude)
튜플은 데이터 무결성이 중요한 경우, 예를 들어 DB에서 조회된 레코드 데이터를 변경할 수 없게 유지할 때 활용됩니다.
3. 딕셔너리(Dictionary)
딕셔너리는 키-값(key-value) 쌍으로 이루어진 데이터 구조로, 빠른 검색 속도가 강점입니다. 대량의 데이터를 효율적으로 저장하고 검색하는 데 매우 유용합니다.
3-1. 딕셔너리 생성 및 요소 접근
# 딕셔너리 생성
person = {"name": "Alice", "age": 25, "city": "Seoul"}
# 키를 사용한 값 조회
print(person["name"]) # 출력: Alice
# 값 변경
person["age"] = 26
3-2. 딕셔너리 주요 메서드
(1) keys()
keys()
메서드는 딕셔너리의 모든 키를 반환합니다.
person = {"name": "Alice", "age": 25}
print(person.keys()) # 출력: dict_keys(['name', 'age'])
(2) values()
values()
메서드는 딕셔너리의 모든 값을 반환합니다.
print(person.values()) # 출력: dict_values(['Alice', 25])
(3) items()
items()
메서드는 키-값 쌍을 튜플 형태로 반환합니다.
print(person.items())
# 출력: dict_items([('name', 'Alice'), ('age', 25)])
(4) get()
get()
메서드는 키에 해당하는 값을 반환하며, 존재하지 않을 경우 기본값을 반환합니다.
print(person.get("name")) # 출력: Alice
print(person.get("city", "Unknown")) # 출력: Unknown
(5) update()
update()
메서드는 기존 딕셔너리에 새로운 키-값을 추가하거나 기존 값을 변경합니다.
person.update({"city": "Seoul"})
print(person) # 출력: {'name': 'Alice', 'age': 25, 'city': 'Seoul'}
- 종합 예시 :
# 요소 추가 및 삭제
person["job"] = "Engineer"
del person["city"]
# 키 존재 여부 확인
if "name" in person:
print("이름 정보가 있습니다.")
# 딕셔너리 반복문 활용
for key, value in person.items():
print(f"{key}: {value}")
딕셔너리는 JSON 형태의 데이터를 다룰 때 필수적인 자료형입니다.
4. 집합(Set)
집합은 중복을 허용하지 않고, 순서가 없는 데이터 구조입니다. 중복된 데이터를 제거하거나, 집합 연산을 수행할 때 유용합니다.
4-1. 집합 생성 및 기본 연산
# 집합 생성
numbers = {1, 2, 3, 4, 5, 5, 5} # 중복 요소 자동 제거
print(numbers) # 출력: {1, 2, 3, 4, 5}
# 집합 연산
A = {1, 2, 3, 4}
B = {3, 4, 5, 6}
print(A | B) # 합집합 {1, 2, 3, 4, 5, 6}
print(A & B) # 교집합 {3, 4}
print(A - B) # 차집합 {1, 2}
4-2. 집합 주요 메서드
(1) add()
add()
메서드는 집합에 새로운 요소를 추가합니다.
numbers = {1, 2, 3}
numbers.add(4)
print(numbers) # 출력: {1, 2, 3, 4}
(2) remove()
remove()
메서드는 특정 요소를 제거하며, 요소가 없을 경우 오류를 발생시킵니다.
numbers.remove(2)
print(numbers) # 출력: {1, 3, 4}
(3) discard()
discard()
메서드는 특정 요소를 제거하지만, 요소가 없을 경우 오류를 발생시키지 않습니다.
numbers.discard(10) # 오류 발생 X
(4) union() (합집합)
두 개의 집합을 합쳐 새로운 집합을 반환합니다.
A = {1, 2, 3}
B = {3, 4, 5}
print(A.union(B)) # 출력: {1, 2, 3, 4, 5}
(5) intersection() (교집합)
두 개의 집합에서 공통 요소만 반환합니다.
print(A.intersection(B)) # 출력: {3}
(6) difference() (차집합)
첫 번째 집합에서 두 번째 집합의 요소를 제거합니다.
print(A.difference(B)) # 출력: {1, 2}
- 리스트 -> 집합 활용 예시 :
# 리스트에서 중복 제거
items = ["apple", "banana", "apple", "orange"]
unique_items = set(items)
print(unique_items) # 출력: {'banana', 'orange', 'apple'}
집합은 데이터를 다루면서 중복을 제거하거나, 그룹 간 비교를 수행할 때 필수적인 자료형입니다.
5. 데이터 구조 선택 가이드
데이터 구조를 선택할 때는 데이터의 특성, 변경 가능 여부, 검색 속도, 중복 처리 방식 등을 고려해야 합니다. 각 구조가 가지는 장점을 잘 이해하면, 성능을 최적화하고 코드의 유지보수성을 높일 수 있습니다. 다음은 주요 데이터 구조의 선택 기준입니다. 각 데이터 구조는 특정 상황에서 더 적합한 경우가 있습니다.
데이터 구조 | 특징 | 사용 사례 |
리스트(List) | 순서 O, 변경 O, 인덱싱 O | 시퀀스 데이터 저장, 반복문 활용, 대량 데이터 처리 |
튜플(Tuple) | 순서 O, 변경 X, 메모리 효율적 | 불변 데이터 저장, 함수에서 여러 값 반환 |
딕셔너리(Dictionary) | 키-값 저장, 검색 속도 빠름 | JSON 데이터 처리, 매핑 관계 저장, 캐싱 시스템 |
집합(Set) | 중복 X, 순서 X, 빠른 포함 검사 | 중복 제거, 집합 연산, 데이터 필터링 |
실제 데이터 분석에서는 딕셔너리와 리스트를 조합하여 JSON 데이터를 처리하거나, 집합을 활용해 중복을 제거하는 방식이 많이 사용됩니다. 상황에 맞게 적절한 데이터 구조를 선택한다면 보다 더 효율적인 프로그래밍이 될 것입니다.
마무리
Python의 리스트, 튜플, 딕셔너리, 집합은 각각 고유한 특성을 가지며, 데이터 분석, 알고리즘 문제 해결, 대량의 데이터를 효율적으로 관리할 때 필수적인 자료형입니다.
실제 데이터 분석에서는 JSON, CSV 데이터 처리와 함께, 딕셔너리와 리스트의 조합이 자주 사용되며, 중복된 데이터를 필터링할 때는 집합(Set) 이 강력한 도구로 활용됩니다.
각 데이터 구조의 특성을 정확히 이해하고 상황에 맞게 선택하는 것은 효율적인 프로그래밍의 핵심 요소입니다. 하지만 직접 경험해 본 바로는, list
와 dictionary
두 가지를 가장 많이 사용하는 것 같습니다. 앞으로는 저도 상황에 맞게 tuple
과 set
을 사용해보도록 노력해야겠습니다..
'Python' 카테고리의 다른 글
Python 파일 입출력 완전 정복: open(), read(), write() (0) | 2025.04.12 |
---|---|
Python의 예외 처리: try, except, finally 그리고 예외 정의하기 (0) | 2025.03.17 |
Python 함수: 정의, 호출, 매개변수, 반환값 (0) | 2025.03.11 |
Python 제어문: 조건문과 반복문 (0) | 2025.03.08 |
Python 기본 문법과 변수, 데이터 타입 (0) | 2025.03.06 |