CS/Python

[Python] Sequence 자료형(튜플, 딕셔너리, 집합), zip() 함수

아이스얼그레이 2022. 4. 19. 20:58

파이썬에는 sequence 자료형이라는 자료형이 있습니다. 하나의 변수에 여러 데이터를 저장할 때 사용하고 리스트(list), 튜플(tuple), 딕셔너리(dcitionary), 집합(set)이 있습니다.

 

본 게시글은 개인 공부를 기록하는 게시글이며 문법상 오류가 있을 수 있습니다.

 

튜플

튜플은 리스트와 비슷하게 쓰이지만 다른 점이 몇 가지 있습니다.

1. 튜플은 소괄호 ()안에 data를 넣어서 선언하며, 한 개의 data만 넣을 때는 (1, ) 처럼 data 뒤에 콤마(,)를 써줘야합니다.

 

2. 튜플은 리스트와 달리 한번 정해진 요소와 요소의 순서를 바꿀 수 없습니다. 튜플 내부의 객체를 변경하거나 삭제할 수 없으며 이를 교환불가능(immutable) 속성이라고 합니다.

 

그래서 프로그램이 실행되면서 값이 바뀌지 않기를 바란다면 튜플을 사용해 변수를 선언해줘야 합니다. 실제 프로그램에서는 값이 바뀌는 변수가 더 많기 때문에 튜플보다는 리스트가 더 자주 쓰입니다.

 

다음과 같은 방식으로 튜플을 생성할 수 있습니다.

# 빈 튜플 초기화
tuple0 = ()
# 하나의 요소를 가진 튜플
tuple1 = (1, )
# 기본적인 튜플 선언
tuple2 = (1, 2 ,3 ,4)
# 간단한 튜플 선언
tuple3 = 1, 2, 3, 4

 

튜플의 값을 추가, 삭제, 변경할 수 없다는 점을 제외하면 리스트와 완전히 동일합니다.

만약 튜플의 값을 변경하고 싶다면 list() 함수를 통해 리스트로 바꾸고 값 변경 후, 다시 tuple() 함수를 써서 튜플 자료형으로 바꿉니다.

 

딕셔너리

딕셔너리는 index를 통해 값을 지정하는 리스트, 튜플과 달리 key, value를 쌍으로 갖는 자료형입니다. index를 이용해 값을 참조하는게 아닌 key를 통해 value를 참조합니다.

 

딕셔너리는 key : value 형식으로 정의합니다. 초기화할 때 중괄호 { }안에 key : value 형식으로 써서 초기화할 수 있습니다. 이때 key, value의 자료형은 정수형, 실수형, 문자열 모두 가능합니다.

 

다음과 같은 방식으로 딕셔너리를 생성할 수 있습니다.

# 빈 딕셔너리 생성
dict0 = {}
# 하나의 요소를 가진 딕셔너리
dict1 = { "이름" : "홍길동" }
# 기본적인 튜플 선언
dict2 = { "이름" : "홍길동", "나이" : 26, "몸무게" : 82 }

 

- 딕셔너리의 삽입, 삭제, 변경

딕셔너리를 삽입할 때는 다음과 같은 방법을 사용합니다.

dict_name[key] = value

이 코드를 실행하면 dict_name 이라는 딕셔너리에 key : value 쌍이 삽입됩니다.

 

딕셔너리를 삭제할 때는 del 키워드를 사용합니다. del 키워드 다음에 삭제할 딕셔너리 항목의 key를 입력합니다.

person = { "이름" : "홍길동", "나이" : 26, "몸무게" : 82 }

del person["나이"]

 

항목 수정은 원래 있던 key에 대응하는 value를 변경해주면 됩니다.

person = { "이름" : "홍길동", "나이" : 26, "몸무게" : 82 }

person["나이"] = 27

위 코드를 통해 "나이"라는 key의 value를 수정할 수 있습니다.

 

딕셔너리에서도 len() 함수, in, not in 키워드 ==, != 연산자를 사용할 수 있습니다. >, >=, <, <= 같은 비교연산은 딕셔너리에서 사용할 수 없습니다.

 

- 딕셔너리의 메소드

메소드 기능
keys() 딕셔너리 내의 모든 key를 반환
values() 딕셔너리 내의 모든 value를 반환
items() 딕셔너리 내의 모든 항목을 key : value 쌍으로 반환
get(key) key에 대한 value를 반환, key가 없다면 None 반환
pop(key) key에 대한 value를 반환, 그 항목을 삭제
popitem() 랜덤하게 선택된 항목을 반환, 그 항목을 삭제
clear() 딕셔너리 내의 모든 항목을 삭제

 

person = { "이름" : "홍길동", "나이" : 26, "몸무게" : 82 }

list_key = person.keys()
list_value = person.values()

>>> ["이름", "나이", "몸무게"]
>>> ["홍길동", 26, 82]

keys(), value() 메소드를 사용하면 위와 같이 딕셔너리의 모든 key와 value가 리스트 자료형으로 반환됩니다.

items() 메소드를 사용하면 key, value가 (key, tuple)로 저장되어 리스트 자료형으로 반환됩니다.

 

- 딕셔너리와 for - in statement

for - in statement를 써서 항목을 하나하나 열거할 수 있습니다.

 

딕셔너리의 for - in 문은 항목의 key를 반환합니다.

person = { "이름" : "홍길동", "나이" : 26, "몸무게" : 82 }

for key in person:
	print(f"{key} : {person[key]}")
    
for key in person.keys():
	print(f"{key} : {person[key]}")

그래서 위 두 for -in statement는 정확히 같은 동작을 합니다.

 

셋(집합)

집합은 유일하게 순서가 없는 sequence 자료형입니다. 수학에서 사용하는 집합과 동일합니다.

동일한 값을 가지는 항목의 중복이 허용되지 않습니다. 교집합(intersection), 합집합(union), 차집합(difference) 등의 집합 연산을 수행할 수 있습니다.

 

집합을 생성하는 방법은 다음과 같습니다.

# 빈 집합 생성
set0 = set()
# 기본적인 집합 만들기
set1 = {1, 2, 3, 4}
# 튜플로부터 집합 만들기
n_tuple = (1, 2, 3, 4)
set2 = set(n_tuple)
# 리스트로부터 집합 만들기
n_list = [1, 2, 3, 4]
set3 = set(n_list)

 

집합은 순서가 없는 원소의 모임이므로 index를 사용할 수 없습니다. 그리고 집합을 만들때 이미 생성된 리스트나 튜플에 set() 함수를 사용할 수 도 있습니다.

 

- 딕셔너리의 메소드

메소드 기능
add(x) 집합내에 원소 x 추가
discard(x) 집합내에 원소 x 삭제
clear() 집합내의 모든 원소 삭제
union(s) s 집합과의 합집합을 구함. | 연산과 동일하다
difference(s) s 집합과의 차집합을 구함. - 연산과 동일하다
intersection(s) s 집합과의 교집합을 구함. & 연산과 동일하다
issubset(s) s 집합의 부분 집합인가를 구함, T/F 반환
issuperset(s) s 집합의 상위 집합인가를 구함, T/F 반환
isdisjoint(s) s 집합과 서로소인지를 구함, T/F 반환

 

- 곱집합

집합론에 곱집합이라는 개념이 있는데, 파이썬의 집합 자료형에서도 구현이 가능합니다. 곱집합 A x B의 원소는 집합 A의 모든 원소 a와 집합 B의 모든 원소 b를 이용해 만들 수 있는 튜플 (a, b)을 원소로 가지는 집합이 됩니다. 

 

사용자 정의함수 product_set(set1, set2)를 이용해 곱집합을 구할 수 있다.

def prodcut_set(set0, set1):
	res = set()
    
    for i in set0:
    	for j in set1:
        	rse = res.union({(i, j)})
            
    return res