본문 바로가기
파이썬 관련 문법

파이썬의 구조분해 할당: 코드를 간결하고 강력하게

by arctis7p 2024. 12. 10.

파이썬의 구조분해 할당(destructuring assignment)은 반복 가능한 객체(iterble - 리스트, 튜플 등)의 값을 여러 변수에 한 번에 할당할 수 있는 기능입니다. 이를 통해 코드를 더 간결하고 읽기 쉽게 만들 수 있습니다.

 

구조분해 할당의 기본 구문은 아래와 같습니다.

변수1, 변수2, ... = 반복가능객체

반복 가능한 객체이기 때문에 여러 변수에 할당이 가능합니다.

 

리스트와 튜플의 구조분해

리스트나 튜플과 같은 시퀀스 타입(순서가 있는 데이터 구조를 나타내는 객체)에서도 구조분해 할당을 사용할 수 있습니다.

numbers = [1, 2, 3]
first, second, third = numbers

print(first)   # 출력: 1
print(second)  # 출력: 2
print(third)   # 출력: 3

이 예제에서는 numbers 리스트의 각 요소를 first, second, third 변수에 할당합니다.

 

참고로 언더스코어(_)를 사용하여 특정 값을 무시할 수 있습니다.

numbers = [1, 2, 3]
first, _, third = numbers

print(first)  # 출력: 1
print(third)  # 출력: 3

이 경우 두 번째 값은 무시됩니다.

 

애스터리스크(*)를 사용하여 나머지 값들을 리스트로 할당할 수도 있습니다.

x, y, *rest = [1, 2, 3, 4, 5]

print(x)     # 출력: 1
print(y)     # 출력: 2
print(rest)  # 출력: [3, 4, 5]

이 예제에서는 첫 두 값을 x와 y에 할당하고, 나머지 값들은 rest 리스트에 할당합니다.

나머지 값들은 언패킹 되지 않고 리스트에 할당되니 주의하셔야 합니다.

 


딕셔너리 구조분해

딕셔너리의 키와 값을 구조분해 할 수도 있습니다.

person = {"name": "Yoon", "age": 22, "city": "gyeonggi-do"}
name, age, city = person["name"], person["age"], person["city"]

print(name, age, city)  # 출력: Yoon 22 gyeonggi-do

이 예제에서는 딕셔너리의 키를 사용하여 값을 추출하고 있습니다.

 

items() 메서드를 사용한 구조분해

items() 메서드를 사용하면 키와 값을 동시에 추출할 수 있습니다.

person = {"name": "Yoon", "age": 22, "city": "gyeonggi-do"}
for key, value in person.items():
    print(f"{key}: {value}")

아래는 출력 값입니다.

name: Bob
age: 25
city: London

 

값만 추출하기

value() 메서드를 사용하여 값만 추출할 수 있습니다.

person = {"name": "Yoon", "age": 22, "city": "gyeonggi-do"}
name, age, city = person.values()

print(name, age, city)  # 출력: Yoon 22 gyeonggi-do

 

키만 추출하기

key() 메서드를 사용하여 키만 추출할 수 있습니다.

person = {"name": "Yoon", "age": 22, "city": "gyeonggi-do"}
key1, key2, key3 = person.keys()

print(key1, key2, key3)  # 출력: name age city

 

기본값 설정

존재하지 않는 키에 대한 기본값을 설정할 수 있습니다.

person = {"name": "Yoon", "age": 22}
name = person.get("name", "Unknown")
age = person.get("age", 0)
city = person.get("city", "Unknown")

print(name, age, city)  # 출력: Yoon 22 Unknown

중첩된 구조분해

이중 리스트와 같은 중첩된 구조에서도 구조분해를 사용할 수 있습니다.

Doubly_Linked_List = [[1, 2], [3, 4], [5, 6]]
a, b, c = Doubly_Linked_List

print(a)  # 출력: [1, 2]
print(b)  # 출력: [3, 4]
print(c)  # 출력: [5, 6]

이 예제에서 Doubly_Linked_List의 각 내부 리스트를 a, b, c 변수에 할당합니다.

 

 

아니면, 중첩된 딕셔너리에서도 구조 분해를 사용할 수 있습니다.

data = {
    "user": {"name": "Yoon", "age": 22},
    "location": {"city": "gyeonggi-do", "country": "Korea"}
}

user_name = data["user"]["name"]
user_age = data["user"]["age"]
city, country = data["location"].values()

print(user_name, user_age, city, country)  # 출력: Yoon 22 gyeonggi-do korea

 

 

 

 

# 이 글의 내용 중 일부는 Perplexity AI의 도움을 받아 정보를 수집하고 정리하였으며, 추가적인 연구와 개인적인 견해를 더하였습니다.