본문 바로가기

컴퓨터프로그래밍

set, dictionary

set(집합): 특정한 conditions를 만족시키는 구별가능한 object의 collection

  • mutable
  • un-ordered(순서가 없음)
  • 동일한 element포함 불가능

python에서 set은 dict과 함께 curly bracket{}을 사용한다.
ex)

a={}
print(type(a))
b=set()
print(type(b))

출력값

<class 'dict'>
<class 'set'>

 

*empty_set=set()
empty_dict={}
empty set, empty dict 차이 명확히 할 것.

set도 curly bracket으로 나타내지만 empty set은 set()으로 dictionary와 차이가 있다.

 

frozenset: 값의 변경이 이루어지지 않도록 고정된 경우.

  • immutable
  • frozenset([arg1,arg2,arg3)]로 생성됨.
  • 생성시 인자로 iterable을 요구함. 

Operation and Methods for 'set' and 'frozenset'

  • union: 합집합 (a|b)
  • difference: 차집합 (a-b)
  • intersection: 교집합 (a&b)
  • symmetric difference: 대칭차집합 (a^b)=(a-b)|(b-a)
a={1,2,3}
b={2,3,4,5}

print(a|b)
print(a-b)
print(a&b)
print(a^b)

출력값

{1, 2, 3, 4, 5}
{1}
{2, 3}
{1, 4, 5}

 

  • print(A <= B): A가 B의 부분집합인지 여부를 확인함. A.issubset(B).  A의 모든 원소가 B에 포함되면 True를 반환함.
  • print(A < B):  A가 B의 진부분집합인지 여부를 확인함. A.issubset(B)에서 같지 않음을 추가로 확인함. A의 모든 원소가 B에 포함되고, B에 A에는 없는 원소가 있을 경우 true를 반환함.
  • print(A >=B):  A.issuperset(B). A가 B의 상위집합인지 여부를 확인함. B의 모든 원소가 A에 포함되면 true 반환함. 
  • print(A > B): 진 superset(진상위집합) 여부를 확인함. A.issuperset(B)와 같지만, A가 B와 같지 않음을 추가로 확인함. B의 모든 원소가 A에 포함되고, A에 B에는 없는 원소가 있을 경우 true를 반환함.
a={2,3}
b={2,3,4,5}

print(a<=b)
print(a<b)
print(a>=b)
print(a>b)

출력값

True
True
False
False

  • A.isdisjoint(B): 두 집합이 공통으로 가지고 있는 element가 없는지 여부 확인. 없으면 true반환.
a={2,3}
b={2,3,4,5}

print(a.isdisjoint(b))

출력값

False #두 집합이 공통으로 가지는 element(2,3)가 있으므로 false이다.

 

Operations and Methods for set

*해당 method들은 대상 object을 변경시키기 때문에 immutable인 frozenset에서는 사용불가.

A = {1,2,3}

A.add(4)     # add 4. 중복되는 element추가시 무시됨.
print(A)     # {1, 2, 3, 4}

A.remove(4)  # argument에 해당하는 element 삭제. 해당 element가 없을시 에러 발생.
print(A)     # {1, 2, 3}

A.discard(4) # argument에 해당하는 element 삭제. 해당 element가 없을시 무시
print(A)     # {1, 2, 3}

c = A.pop()  # 임의의 element를 반환하고, 해당 element를 set에서 삭제
print(A)     # {2, 3}

A.clear()    # element들을 모두 삭제.
print(A)     # set()

*set.pop(): 제일 먼저 들어간 element가 제일 먼저 튀어나옴.

 stack에서의 pop: FILO(First-In-Last-Out), 처음으로 들어간 element가 마지막에 나옴.

 

A = {1,2,3}
B = {2,3,4,5}

A |= B # A.update(B)
print(A) #{1,2,3,4,5}
A &= B # A.intersection_update(B)
print(A) #{2,3,4,5}
A -= B # A.difference_update(B)
print(A) #set(). empty set은 set()임.
A ^= B # A.symmetric_difference_update(B)
print(A) #{2,3,4,5}

 

dictionary

  • key-value pair를 item으로 가짐.
  • unordered
  • mutable

set과 함께 curly bracket{} 사용.

 

dictionary는 key와 value가 하나의 item이고, 해당 key를 통한 indexing이 가능하다.

  • immutable object만이 key가 될 수 있음
  • mutable object은 hashable이지 않음.
    • hash: 데이터(보통 문자열이나 파일 등)을 고정된 길이의 고유한 값으로 변환하는 과정이다. 해시는 주로 데이터의 무결성을 확인하거나 빠른 데이터 검색을 위해 사용된다. hash객체는 immutable해야함.
      input을 넣었을 때 일정한 output이 나와야함.
    • hashable: 파이썬에서 객체가 해시 가능한지를 나타내는 개념.
      '해시가능'-객체가 고유한 해시 값을 가질 수 있으며, 이를 통해 객체를 키로 사용할 수 있다는 것을 의미함.

dictionary는 기본적으로 square bracket과 key를 통해 item에 접근할 수 있다.

  • dic_name[new_key]=value: 새로운 키를 이용한 assignment를 통해 새로운 key-value pair가 추가됨.
  • dic_name[exist_key]=new_value: 기존에 존재하는 키를 이용한 assignment는 해당 키에 해당하는 value를 새로운 값으로 교체함.
  • del dic_name[exist_key]: 해당 키에 해당하는 key-value pair를  dictionary에서 제거한다. 만약 지정한 키가 없다면, KeyError가 발생한다.

dictionary는 key를 통해 indexing이 이루어지므로 in membership operator 사용 시 key들에 대한 확인이 이루어짐.

dict={'fruit':'apple', 'animal':'dog'}

print('fruit'in dict) #True
print('dog' in dict) #False

 

dictionary's method

비우기

  • dic_name.clear()
  • 'dic_name' dictionary의 모든 object을 지움.

값 얻어오기

  • dic_name.get(key)
  • key에 해당하는 키를 가지고 있는 value를 반환. 만약 없다면 None이 반환됨.
  • square bracket은 에러가 발생하지만, 위는 에러가 발생하지 않음.

빼내면서 값 얻어오기

  • dic_name.pop(key)
  • key에 해당하는 value를 반환하고, dict에서 해당 key-value pair를 제거함.

추가하면서 값 얻어오기

  • dic_name.setdefault(key)
  • key에 해당하는 value를 반환.
  • dic_name.setdefault(key,value)
  • key에 해당하는 value가 있으면 dic_name.setdefault(key)와 동일
  • key에 해당하는 value가 없으면, value를 반환하고 해당 key-value pair를 dictionary에 추가함.

다른 dictionary object으로 갱신

# 기존 딕셔너리
dic = {"name": "Alice", "age": 30, "city": "New York"}

# 업데이트할 딕셔너리
other_dic = {"age": 31, "email": "alice@example.com"}

# dic을 other_dic의 내용으로 업데이트
dic.update(other_dic)

print(dic)
# 출력: {'name': 'Alice', 'age': 31, 'city': 'New York', 'email': 'alice@example.com'}

 

Loop(iteration)

dic={'a':1,'b':2,'c':3}

for k in dic:
    print(f'key is {k}')
   
for i in dic.values():
    print(f'value is {i}')
   
for k,i in dic.items():
    print(f'key is {k}, value is {i}')
   
for k in dic.keys():
    print(f'key is {k}')

출력값

key is a
key is b
key is c
value is 1
value is 2
value is 3
key is a, value is 1
key is b, value is 2
key is c, value is 3
key is a
key is b
key is c

 

*'3+5'에서 3,5는 operand이고 +는 operator이다. operator는 operand를 작동한다.

'컴퓨터프로그래밍' 카테고리의 다른 글

Iterator, Generator  (0) 2024.06.01
Comprehension  (0) 2024.05.31
function  (2) 2024.05.22
sys  (3) 2024.05.21
class  (0) 2024.05.20