시퀀스와 컨테이너의 공통 특성
파이썬에서 숫자형이 아닌 시퀀스(Sequence) 및 컨테이너(Container) 자료형은 다음과 같은 공통적인 특성과 연산을 지원합니다.
- 인덱싱(Indexing):
[]를 사용하여 특정 위치의 요소에 접근 - 순회(Iteration):
for item in container구문을 통한 요소 탐색 - 공통 연산: 길이 계산(
len), 최대/최소값 도출, 요소 비교 및 삭제 - 결합과 반복:
+연산자를 통한 연결,*연산자를 통한 반복 (단, 딕셔너리는 반복 연산 미지원) - 슬라이싱(Slicing): 범위를 지정하여 부분 집합 추출 (단, 딕셔너리는 슬라이싱 미지원)
리스트 (List)
리스트의 개념과 정의
리스트는 파이썬에서 가장 널리 사용되는 동적 배열 형태의 자료형입니다. 대괄호 []를 사용하며, 쉼표로 구분된 여러 개의 요소를 저장할 수 있습니다. 인덱스는 0부터 시작합니다.
planets = ["Mercury", "Venus", "Earth", "Mars"]
리스트의 주요 연산
planets = ["Mercury", "Venus", "Earth", "Mars"]
# 1. 요소 접근 및 인덱스 찾기
first_planet = planets[0]
print(first_planet) # "Mercury"
print(planets.index("Earth")) # 2
# 2. 요소 수정
planets[1] = "Venus (Modified)"
# 3. 요소 추가
# append: 단일 요소를 맨 뒤에 추가
planets.append("Jupiter")
# insert: 특정 인덱스에 요소 삽입
planets.insert(2, "Moon")
# extend: 다른 이터러블 객체의 요소들을 개별적으로 병합
outer_planets = ["Saturn", "Uranus", "Neptune"]
planets.extend(outer_planets)
# 4. 요소 개수 및 통계
print(len(planets))
print(planets.count("Moon"))
# 5. 정렬 및 뒤집기
num_sequence = [4, 1, 9, 2, 7]
num_sequence.sort() # 오름차순
num_sequence.sort(reverse=True) # 내림차순
num_sequence.reverse() # 순서 반전
# 6. 요소 삭제
planets.remove("Moon") # 특정 값 제거 (첫 번째로 발견된 것만)
popped_item = planets.pop() # 맨 마지막 요소 제거 및 반환
planets.pop(1) # 특정 인덱스의 요소 제거
del planets[0] # 메모리에서 요소 완전 삭제
planets.clear() # 리스트 내부의 모든 요소 초기화
append()와 extend()의 차이점
append(): 전달된 객체 자체를 하나의 단일 요소로 취급하여 리스트에 추가합니다.extend(): 전달된 이터러블 객체를 순회하며 각 요소를 분해해 기존 리스트에 개별적으로 병합합니다.
용어 정리: 키워드, 함수, 메서드
- 키워드(Keyword): 파이썬 인터프리터에 예약된 특수 식별자 (예:
del,for). - 함수(Function): 독립적인 기능을 수행하며 객체와 무관하게 호출 (예:
len(),max()). - 메서드(Method): 특정 객체에 종속되어 해당 객체의 상태를 제어하거나 정보를 반환 (예:
list.append()).
리스트 순회
리스트의 모든 요소를 차례대로 처리하기 위해 for 루프를 사용한 이터레이션을 권장합니다.
fruits = ["Apple", "Banana", "Cherry"]
for fruit in fruits:
print(f"Current fruit: {fruit}")
튜플 (Tuple)
튜플의 개념과 정의
튜플은 리스트와 유사하지만, 생성 후 요소의 수정이 불가능한(Immutable) 특성을 가집니다. 소괄호 ()를 사용하며, 데이터 무결성이 요구되는 경우나 함수의 다중 반환값으로 주로 활용됩니다.
server_config = ("192.168.1.1", 8080, "Production")
주의사항
- 빈 튜플 생성:
empty_tuple = () - 요소가 1개뿐인 튜플은 반드시 뒤에 쉼표를 붙여야 합니다. 그렇지 않으면 일반적인 괄호 연산자로 인식됩니다.
single_element = (42,) # 올바른 튜플 정의
not_a_tuple = (42) # 단순히 정수 42로 인식됨
튜플의 연산 및 변환
rgb_color = (255, 128, 0)
print(rgb_color[0]) # 255
print(rgb_color.index(128)) # 1
print(len(rgb_color)) # 3
# 리스트와 튜플 간 상호 변환
color_list = list(rgb_color)
restored_tuple = tuple(color_list)
딕셔너리 (Dictionary)
딕셔너리의 개념과 정의
딕셔너리는 키(Key)와 값(Value)의 쌍으로 데이터를 저장하는 해시 테이블 기반의 자료형입니다. 중괄호 {}를 사용하며, 키는 고유해야 하고 불변형(문자열, 숫자, 튜플)이어야 합니다.
user_profile = {
"username": "dev_master",
"level": 45,
"is_premium": True
}
딕셔너리의 주요 연산
user_profile = {"username": "dev_master", "level": 45}
# 1. 값 접근 (존재하지 않는 키 접근 시 KeyError 발생)
print(user_profile["username"])
# 2. 데이터 추가 및 수정
user_profile["email"] = "dev@example.com" # 새 키-값 쌍 추가
user_profile["level"] = 46 # 기존 값 수정
# 3. 데이터 삭제
removed_value = user_profile.pop("email")
# 4. 딕셔너리 병합 (기존 키는 덮어씌워짐)
extra_info = {"level": 50, "guild": "NightOwls"}
user_profile.update(extra_info)
# 5. 전체 순회
for key, value in user_profile.items():
print(f"{key}: {value}")
문자열 (String)
문자열의 정의와 특성
문자열은 텍스트 데이터를 표현하는 불변(Immutable) 시퀀스입니다. 단일 인용부호(') 또는 이중 인용부호(")로 감싸며, 내부에 인용부호를 포함해야 할 경우 교차 사용하거나 이스케이프 문자(\)를 활용합니다.
문자열 주요 메서드
| 분류 | 메서드 | 설명 |
|---|---|---|
| 판별 | isalpha() | 모든 문자가 알파벳인지 확인 |
isdigit() | 모든 문자가 숫자(일부 특수 숫자 문자 포함)인지 확인 | |
isupper() | 알파벳 문자가 모두 대문자인지 확인 | |
| 탐색 | find(str) | 부분 문자열의 첫 번째 인덱스 반환 (없으면 -1) |
startswith(prefix) | 지정된 접두사로 시작하는지 여부 반환 | |
| 변경 | replace(old, new) | 기존 부분 문자열을 새로운 문자열로 치환 |
| 정렬 | center(width, char) | 지정된 너비만큼 문자열을 중앙 정렬하고 나머지 공간 채움 |
ljust(width) | 왼쪽 정렬 후 오른쪽 공간을 공백으로 채움 | |
| 공백 제거 | strip() | 문자열 양 끝의 공백 및 개행 문자 제거 |
| 분할/결합 | split(separator) | 구분자를 기준으로 문자열을 분할하여 리스트 반환 |
join(iterable) | 이터러블의 요소들을 현재 문자열로 연결하여 새 문자열 생성 |
raw_text = " Python is awesome, Python is powerful. "
clean_text = raw_text.strip()
# 분할 및 결합
words = clean_text.split(",")
rejoined = " | ".join([w.strip() for w in words])
print(rejoined) # "Python is awesome | Python is powerful."
# 탐색 및 치환
print(clean_text.find("awesome")) # 10
print(clean_text.replace("Python", "Coding"))
슬라이싱 (Slicing)
슬라이싱은 리스트, 튜플, 문자열과 같은 시퀀스 자료형에서 특정 범위의 요소를 추출하는 강력한 기능입니다. 딕셔너리는 순서가 보장되는 매핑 구조가 아니므로 슬라이싱을 지원하지 않습니다.
기본 문법: sequence[start:stop:step]
start: 시작 인덱스 (포함, 기본값 0)stop: 종료 인덱스 (미포함, 기본값 끝까지)step: 증감폭 (기본값 1, 음수일 경우 역순 탐색)
alphabet = "abcdefghijklmnopqrstuvwxyz"
print(alphabet[2:7]) # "cdefg" (인덱스 2부터 6까지)
print(alphabet[10:]) # "klmnopqrstuvwxyz" (인덱스 10부터 끝까지)
print(alphabet[:5]) # "abcde" (처음부터 인덱스 4까지)
print(alphabet[::3]) # "adgjmpsvy" (처음부터 3칸씩 건너뛰기)
print(alphabet[::-1]) # "zyxwvutsrqponmlkjihgfedcba" (전체 역순)
print(alphabet[-5:-1]) # "vwxy" (뒤에서 5번째부터 뒤에서 2번째까지)
공통 내장 함수
파이썬은 시퀀스 및 컨테이너 자료형에 적용할 수 있는 다양한 내장 함수를 제공합니다.
| 함수 | 역할 | 특이사항 |
|---|---|---|
len(obj) | 컨테이너 내 요소의 총 개수 반환 | 딕셔너리의 경우 키-값 쌍의 개수를 계산 |
max(obj) | 컨테이너 내 최대값 반환 | 딕셔너리는 키(Key)를 기준으로 비교 |
min(obj) | 컨테이너 내 최소값 반환 | 딕셔너리는 키(Key)를 기준으로 비교 |
del obj | 객체 또는 특정 요소를 메모리에서 제거 | 키워드이자 내장 함수로 동작 |
참고: 파이썬 2.x에 존재하던 cmp() 함수는 파이썬 3.x에서 완전히 제거되었습니다. 객체 비교에는 <, >, == 등의 비교 연산자를 사용해야 합니다.
for-else 구문의 활용
파이썬의 for 루프는 else 블록을 동반할 수 있습니다. 이 else 블록은 루프가 break문에 의해 중단되지 않고 정상적으로 모든 순회를 마쳤을 때 실행됩니다. 주로 특정 조건을 만족하는 요소를 탐색할 때 유용합니다.
target_value = 42
dataset = [15, 22, 38, 42, 57, 89]
for number in dataset:
if number == target_value:
print(f"성공: 목표 값 {target_value}을(를) 인덱스 {dataset.index(number)}에서 찾았습니다.")
break
else:
# break가 한 번도 실행되지 않은 경우에만 도달
print(f"실패: 데이터셋에서 {target_value}을(를) 찾을 수 없습니다.")