Programming language/Python

[python] 집합 μžλ£Œν˜• set()

deo2kim 2020. 9. 8. 20:41
λ°˜μ‘ν˜•

πŸ“— 집합 set()

set은 λ¦¬μŠ€νŠΈμ™€ λΉ„μŠ·ν•˜κ²Œ λ³Ό 수 μžˆλ‹€. ν•˜μ§€λ§Œ 인덱슀둜 접근이 λΆˆκ°€λŠ₯ν•˜κ³ , 정렬도 ν•  수 μ—†λ‹€. for 문으둜 ν•˜λ‚˜ν•˜λ‚˜ 좜λ ₯해봐도 κ·Έλ•Œ κ·Έλ•Œ μˆœμ„œκ°€ λ’€μ£½λ°•μ£½μœΌλ‘œ λ‹€λ₯΄κ²Œ λ‚˜μ˜¨λ‹€.

 

set 을 μ‚¬μš©ν•˜λŠ” μ΄μœ λŠ”

  • 쀑볡이 μ—†λ‹€
  • νŠΉμ • μ›μ†Œκ°€ μžˆλŠ” 지 확인할 λ•Œ O(1)의 μ‹œκ°„ λ³΅μž‘λ„λ₯Ό 가진닀. ( 리슀트의 경우 O(N) ) ex)  if μ›μ†Œ in μ…‹: 
  • 집합 κ΄€λ ¨

πŸ”΅ ꡐ집합, 합집합, 차집합 

ꡐ집합: & or intersection

합집합: | or union

차집합: - or difference

set1 = {1, 2, 3, 4, 5}
set2 = {3, 4, 5, 6, 7}
# ꡐ집합
print(set1.intersection(set2))  # {3, 4, 5}
print(set1 & set2)  # {3, 4, 5}
# 합집합
print(set1.union(set2))  # {1, 2, 3, 4, 5, 6, 7}
print(set1 | set2)  # {1, 2, 3, 4, 5, 6, 7}
# 차집합
print(set1.difference(set2))  # {1, 2}
print(set1 - set2)  # {1, 2}

 

🟒 μ„ μ–Έ set

set을 μ„ μ–Έν•  λ•ŒλŠ” 보톡

my_set = set()
# or
my_set = {"apple", "melon", "grape"}
print(my_set)  # {'grape', 'melon', 'apple'}

πŸ”Ί μœ„μ—μ„œ 좜λ ₯ν•œ 것을 보면 μˆœμ„œκ°€ λ‹€λ₯΄κ²Œ λ‚˜μ˜€λŠ” 것을 확인할 수 μžˆλ‹€.

 

🟒 μΆ”κ°€ (μ›μ†Œ ν•œκ°œ μΆ”κ°€) add

my_set.add('orange')
print(my_set)  # {'orange', 'grape', 'melon', 'apple'}

 

🟒 μΆ”κ°€ (μ›μ†Œ μ—¬λŸ¬κ°œ μΆ”κ°€) update

my_set.update(["blueberry", "banana"])
print(my_set)  # {'orange', 'apple', 'banana', 'grape', 'melon', 'blueberry'}

 

🟒 μ‚­μ œ remove

my_set.remove("apple")
print(my_set)  # {'blueberry', 'orange', 'grape', 'banana', 'melon'}

!!! ν•˜μ§€λ§Œ μ—†λŠ” μ›μ†Œλ₯Ό μ§€μš°λ €κ³  ν•˜λ©΄ KeyError λ°œμƒ

my_set.remove("dog")

 

🟒 μ‚­μ œ2 discard

μ—†λŠ” μ›μ†Œλ₯Ό μ§€μš°λ €κ³  해도 μ—λŸ¬κ°€ λ‚˜μ§€ μ•ŠλŠ”λ‹€.

my_set.discard("grape")
print(my_set)  # {'blueberry', 'melon', 'banana', 'orange'}
my_set.discard("dog")
print(my_set)  # {'blueberry', 'melon', 'banana', 'orange'}

πŸ”Ί removeλŠ” μ›μ†Œκ°€ κΌ­ μžˆμ–΄μ•Ό ν•˜κ³ , discardλŠ” 없어도 λœλ‹€. (그럼 discard만 μ“°λ©΄ λ˜λŠ”κ±° μ•„λ‹κΉŒ? πŸ˜‚πŸ˜‚ 잘 λͺ¨λ₯΄κ² λ‹€)

 

🟒 μ‚­μ œμ™€ 뽑기 pop

pop은 사싀 리슀트의 κ°€μž₯ λ§ˆμ§€λ§‰μ— μžˆλŠ” μ›μ†Œλ₯Ό λ½‘μ•„μ„œ λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜μ΄λ‹€. ν•˜μ§€λ§Œ set은 μˆœμ„œκ°€ μ—†κΈ° λ•Œλ¬Έμ— μ–΄λ–€ 값이 λ‚˜μ˜¬μ§€ λͺ¨λ₯Έλ‹€. λ˜‘κ°™μ€ setμ—μ„œ νŒμ„ μ‹€ν–‰ν•  λ•Œλ§ˆλ‹€ λ‹€λ₯Έ 값이 λ‚˜μ˜¨λ‹€.

# 1μ°¨ μ‹œλ„
print(my_set)  # {'banana', 'blueberry', 'orange', 'melon'}
tmp = my_set.pop()
print(tmp)  # banana
print(my_set)  # {'blueberry', 'orange', 'melon'}

# 2μ°¨ μ‹œλ„
print(my_set)  # {'blueberry', 'orange', 'banana', 'melon'}
tmp = my_set.pop()
print(tmp)  # blueberry
print(my_set)  # {'orange', 'banana', 'melon'}

πŸ”Ί μžμ„Ένžˆ 보면 κ°€μž₯ μ•žμ˜ μ›μ†Œκ°€ λ‚˜μ˜¨ κ±° κ°™λ‹€. ν•˜μ§€λ§Œ!!! set은 μˆœμ„œκ°€ μ—†μœΌλ―€λ‘œ λͺ¨λ“ κ²Œ λžœλ€μ΄λ‹€.

 

🟒 λΉ„μš°κΈ° clear

set μ•ˆμ˜ λͺ¨λ“  μ›μ†Œλ₯Ό μ§€μš°λŠ” λ©”μ†Œλ“œ

my_set.clear()
print(my_set)  # set()

 

🟒 ν•©μΉ˜κΈ° union

λ‘κ°œμ˜ set을 ν•©μ³μ„œ μƒˆλ‘œμš΄ set을 생성

your_set = {"tomato", "cherry", "lemon"}
print(my_set)  # {'melon', 'orange', 'blueberry'}
print(your_set)  # {'tomato', 'cherry', 'lemon'}
our_set = my_set.union(your_set)  
print(our_set)  # {'tomato', 'melon', 'orange', 'blueberry', 'cherry', 'lemon'}

 

🟒 ν•©μΉ˜κΈ°2 update

μ•„κΉŒ μœ„μ—μ„œ 봀던 μ—¬λŸ¬κ°œμ˜ μ›μ†Œλ₯Ό μ§‘μ–΄λ„£λŠ” κΈ°λŠ₯κ³Ό κ°™λ‹€

μ—¬λŸ¬κ°œμ˜ μ›μ†Œ λŒ€μ‹  ν•˜λ‚˜μ˜ λ¦¬μŠ€νŠΈλ‚˜ 셋을 집어 λ„£λŠ”λ‹€.

new_set = {"ddalgi"}
list1 = ['sagwa', 'podo']
new_set.update(list1)
print(new_set)  # {'podo', 'ddalgi', 'sagwa'}
set1 = {"bae", "subak"}
new_set.update(set1)
print(new_set)  # {'podo', 'ddalgi', 'sagwa', 'subak', 'bae'}

 

λ°˜μ‘ν˜•