Eat Study Love

먹고 공부하고 사랑하라

SW 만학도/Python

6. Sets, Tuples, and Dictionaries

eatplaylove 2024. 3. 15. 09:20

 

Python의 보다 다양한 자료구조를 알아보자.

다~ 나중에 요긴하게 쓰일 자료구조라 정확히 구분짓고 넘어가는 것이 중요!

 

Sets

 

- 집합

- 순서가 따로 없고, 모든 원소는 서로 달라야한다. Unordered and Distinct

- 원소를 추가/삭제할 순 있지만 수정할 순 없다. Immutable

alphabet = {'a','b','b','a','d','c','c','e'}
alphabet
{'a', 'b', 'c', 'd', 'e'}

 

- 중괄호롤 사용해 위와 같이 Set을 선언할 수 있다.

- 중복되는 것 제거 + 순서 마음대로 재정렬되는 것 확인(Unordered and Distinct)

 

#An empty set
empty = set()
empty1 = {} # 이것은 Dictionary!!

 

- 공집합은 set() 으로 만들어 준다.

- set 안에 List 넣어서 set 만들어주기 가능 --> set([1,3,2,2,5]) --> {1,2,3,5}

 

Methods with Sets

test1 = set([0,1,3,3,2,4,5,6,7,8])
test2 = {0,1,2,3}
print('test1=',test1,',test2=',test2)
​
test1.add(10)
print(test1)
​
test1.remove(10)
print(test1)
​
print(test1.issubset(test2)) #부분집합 여부
print(test1.issuperset(test2)) 
print(test1.difference(test2)) #차집합
print(test1.intersection(test2)) #교집합
print(test1.union(test2)) #합집합
----------------------------------------
test1= {0, 1, 2, 3, 4, 5, 6, 7, 8} ,test2= {0, 1, 2, 3}
{0, 1, 2, 3, 4, 5, 6, 7, 8, 10}
{0, 1, 2, 3, 4, 5, 6, 7, 8}
False
True
{4, 5, 6, 7, 8}
{0, 1, 2, 3}
{0, 1, 2, 3, 4, 5, 6, 7, 8}

 

 

Set is immutable

 

- Set은 내제된 Data check를 Hashing 이라는 스킬을 통해 굉장히 빨리 하는데, 이 때문에 Mutable한 원소를 갖지 못 한다. 그래서 List와 같이 Mutable한 원소를 Set에 추가하려고 하면 Error!

 

 

Tuples

 

- 튜플은 순서가 상관이 있고 원소를 바꿀 수 없다. Orderd and Immutable

- 튜플은 데이터 중복이 허용된다! Not Ditinct

- 튜플은 아래와 같이 Declare한다. 유의점은 원소가 하나 일 땐 쉼표를 써준다. 쉼표를 안 쓰면 튜플로 인식 안 하고 그냥 수학식 숫자로 간주

 

tuples = ()
print(tuples)
tuples = (4)
print(tuples)
tuples = (4,)
print(tuples)
tuples = (1+3)
print(tuples)
tuples = ('억')
print(tuples)
tuples = (1+3,)
print(tuples)
tuples = (1,3,3,2,[1,2,3])
print(tuples)
()
4
(4,)
4
억
(4,)
(1, 3, 3, 2, [1, 2, 3])

 

 

- 튜플의 경우 List를 원소로 받을 수 있고, 이 때 튜플 안에 있는 List의 값은 바꿀 수 있다.(List 주소는 고정! 다만 그 안에 있는 값은 바꿀 수 있다는 것)

 
student=(['Kim','A'],['Park','C'],100)
student[0]='Change'
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[32], line 1
----> 1 student[0]='Change'

TypeError: 'tuple' object does not support item assignment
---------------------------------------------------------------------------

student[0]
['Kim', 'A']

student[0][0]='Lee'
student
(['Lee', 'A'], ['Park', 'C'], 100)
 
 

Dictionaries

 
- Python에서 가장 많이 쓰일 자료구조! 굉장히 중요하다.
- 순서가 있고 수정이 가능하며 중복이 없다. Ordered / Mutable / No Duplicates
- Key 와 Value 의 Pair로 구성되어 있다.
- Key는 중복을 허용하지 않는다!!!
 
dict_empty={}
dict_mem = {'Lee':'A','Park':'B','Park':'C'} # Lee / Park -> Keys , 'A','B','C' -> Valeus 키/벨류 둘이 합쳐서 Items

print(dict_mem)
print(dict_mem['Park'])
{'Lee': 'A', 'Park': 'C'}
C

 

 

- Update / Modify 가능! Mutable!

 

dict_mem = {'Lee':'A','Park':'B','Park':'C'}
dict_mem['Kim'] = 'Z'
print(dict_mem)
dict_mem['Kim'] = 'Y'
print(dict_mem)
​
print('Han' in dict_mem)
print('Kim' in dict_mem)
del dict_mem['Kim']
print(dict_mem)
-------------------------------------------
{'Lee': 'A', 'Park': 'C', 'Kim': 'Z'}
{'Lee': 'A', 'Park': 'C', 'Kim': 'Y'}
False
True
{'Lee': 'A', 'Park': 'C'}

 

 

- For loop with Dict

 

print(dict_mem)
​
for key in dict_mem:
    print(key)
​
for x in dict_mem:
    print([x,dict_mem[x]])
​
for key,value in dict_mem.items():
    print(key,value)
    
-------------------------------------------
{'Lee': 'A', 'Park': 'C', 'Kim': 'Z'}
Lee
Park
Kim
['Lee', 'A']
['Park', 'C']
['Kim', 'Z']
Lee A
Park C
Kim Z

 

Methods with Dictionaries

 

 

- Dictionary ex)

- Key / Value를 뒤바꾼 Dictionary를 만들어 보자

 

dict_mem
{'Lee': 'A', 'Kim': 'Z', 'Park': 'C', 'Ahn': 'Z'}
dict_new={}
for key,value in dict_mem.items():
    dict_new[value]=key  #value가 'Z'으로 중복인 경우는 Key로 전환될 때 날라갈 수밖에 없다..
dict_new
{'A': 'Lee', 'Z': 'Ahn', 'C': 'Park'}

 

 

- Value가 중복이 있는 경우를 따져서 다시 코딩을 해보자

 

dict_mem={'Lee': 'A', 'Kim': 'Z', 'Park': 'C', 'Ahn': 'Z'}
dict_new={}
for key,value in dict_mem.items():
    if value not in dict_new:
        dict_new[value]=key  
    else:
        dict_new[value]=[dict_new[value],key] 
dict_new
​
{'A': 'Lee', 'Z': ['Kim', 'Ahn'], 'C': 'Park'}

 

# 이런 식으로 아예 새로운 value들을 전부 List로 지정해도 된다

dict_mem={'Lee': 'A', 'Kim': 'Z', 'Park': 'C', 'Ahn': 'Z'}
dict_new={}
​
for key, value in dict_mem.items():
    if value in dict_new:
        dict_new[value].append(key)
    else:
        dict_new[value]=[key]
dict_new
{'A': ['Lee'], 'Z': ['Kim', 'Ahn'], 'C': ['Park']}

 

 

Mutability Summary

 

자료구조 Mutability Ordered 비고
String X O Keep track of a text
List O O Keep track of an ordered sequence
Tuple X O Build an ordered seq that won't be change
Value가 List이면 List 안 값은 바꿀 수 있다.
Set O
(add / remove로 value 수정)
X Keep track of values. But order doesn't matter. And values must be immutable
List 같은 Mutable 값 자체를 Value로 가지지 못한다. 
Dictionary O O Mapping, Keys are immutable

 

 

복잡한 자료구조의 세계..

코딩하다보면 자연스럽게 위 표는 손에 익혀진다고 한다..

 

 

 

 

 

'SW 만학도 > Python' 카테고리의 다른 글

8. Object-oriented Programming in Python  (0) 2024.03.15
7. File I/O in Python  (1) 2024.03.15
5. Lists and Loops in Python  (0) 2024.03.14
4. Modules and Classes in Python  (0) 2024.03.13
3. String and Control in Python  (0) 2024.03.13