[Python] Set(μ…‹)

2021. 1. 16. 02:34γ†πŸ“š Algorithm/πŸ“• Python 문법

λ°˜μ‘ν˜•

 

νŒŒμ΄μ¬μ—μ„œ 집합을 κ΅¬ν˜„ν•˜κ³  싢을 땐 ?!

Set 을 μ΄μš©ν•˜λ©΄ λ©λ‹ˆλ‹€. νŒŒμ΄μ¬μ—μ„œλŠ” setμ΄λΌλŠ” 집합 자료ꡬ쑰λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€. 

집합은 set( ) κ³Ό 같이 μ΄ˆκΈ°ν™” ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

 

set μ–Έμ œ μ‚¬μš©ν•˜λ©΄ μ’‹μ„κΉŒ!?

집합은 이럴 λ•Œ μ‚¬μš©ν•˜λ©΄ μ’‹μŠ΅λ‹ˆλ‹€.

1. λ°μ΄ν„°μ˜ 쀑볡이 없어도 될 λ•Œ

집합에 λ‹΄κΈ΄ 데이터듀은 λͺ¨λ‘ μœ λ‹ˆν¬ ν•©λ‹ˆλ‹€. 즉, 집합에 5λ₯Ό 2번 넣어도 집합은 μžμ‹ μ΄ 가진 μ›μ†Œ 5λŠ” 1개라고 μƒκ°ν•©λ‹ˆλ‹€.

 

2. λ‹€λ£¨λŠ” λ°μ΄ν„°μ˜ μ‚½μž…/μ‚­μ œ/검사가 자주 일어 λ‚  λ•Œ 특히 λ‹€λ£¨λŠ” 데이터가 μ •μˆ˜κ°€ 아닐 λ•Œ 

μˆ«μžν˜• λ°μ΄ν„°λŠ” listλ₯Ό μ‚¬μš©ν•˜μ—¬ indexλ₯Ό 톡해 μ ‘κ·Όν•  수 μžˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ λ¬Έμžμ—΄,λ“± λ¦¬μŠ€νŠΈμ—μ„œ index둜 ν™œμš©ν•  수 μ—†λŠ” 데이터λ₯Ό λΉ λ₯΄κ²Œ νƒμƒ‰μ‹œμ—λŠ” set을 μ΄μš©ν•˜λ©΄ μ’‹μŠ΅λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, λ¦¬μŠ€νŠΈμ— 'aaa'μ›μ†Œκ°€ μžˆλŠ”μ§€ μ•Œμ•„λ‚΄λ €λ©΄ O(N)이 κ±Έλ¦¬μ§€λ§Œ 집합은 O(1)이 μ†Œμš”λ©λ‹ˆλ‹€.

 

3. μˆ˜ν•™μ μœΌλ‘œ ꡐ집합, 차집합, 합집합을 ꡬ해야할 λ•Œ 

파이썬의 μ§‘ν•©μ—μ„œλŠ” μˆ˜ν•™μ—μ„œμ˜ 집합이 가진 λŒ€λΆ€λΆ„μ˜ κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€.

 

set의 μ‹œκ°„λ³΅μž‘λ„

Operation Time Complexity
탐색 "aaa" in myset O(1)
제거 myset.remove O(1)
합집합 set1 | set2 O(len(set1)+ len(set2))
ꡐ집합 set1 & set2 O(min(len(set1), len(set2))
차집합 set1 - set2 O(len(set1))
λŒ€μΉ­μ°¨ set1 ^ set2 O(len(set1))

λŒ€μΉ­μ°¨ = 합집합 - ꡐ집합

 

set μ‚¬μš©μ‹œμ— μ£Όμ˜ν•  점

hashable νƒ€μž…λ§Œ μ§‘ν•©μ˜ μ›μ†Œλ‘œ 넣을 수 μžˆμŠ΅λ‹ˆλ‹€.

- hashable νƒ€μž… : int, float, decimal, bool, string, tuple, frozenset, λ“±

- non - hashable νƒ€μž… : list, dict,set, μœ μ €κ°€ λ§Œλ“  클래슀, λ“±

 

set μ‚¬μš©λ²•

πŸ“Œ Init

set ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λ©΄ 빈 집합을 μ„ μ–Έν•  수 μžˆμŠ΅λ‹ˆλ‹€.

# 빈 집합 μƒμ„±ν•˜κΈ°

empty_set = set()
empty_set # set()

# νŠΉμ • μ›μ†Œλ₯Ό κ°€μ§€λŠ” 집합 μ„ μ–Έν•˜κΈ°

my_set = set([1, 2, 3, 1, 2, 3])
my_set # {1,2,3}

 

πŸ“Œ Add

집합에 μ›μ†Œλ₯Ό 넣을 λ•ŒλŠ” add λ©”μ†Œλ“œλ₯Ό μ΄μš©ν•©λ‹ˆλ‹€.

단 hashable νƒ€μž…(int, float, string, λ“± , list XX)만 집합에 넣을 수 μžˆλ‹€λŠ” 것을 μ£Όμ˜ν•΄μ•Όν•©λ‹ˆλ‹€!

# κ°’ 집어넣기

my_set = set()
my_set.add(3)
my_set.add('동동')

my_set # {3,'동동'}

 

πŸ“Œ Delete

μ§‘ν•©μ—μ„œ νŠΉμ • μ›μ†Œλ₯Ό μ§€μš°λ €λ©΄ remove λ©”μ†Œλ“œλ₯Ό μ΄μš©ν•©λ‹ˆλ‹€.

# μ›μ†Œ 제거 μ˜ˆμ‹œ
my_set = set([1,2,3,4,5])
my_set.remove(1)

my_set # {2,3,4,5}

 

πŸ“Œ 합집합 |

# 합집합: | λ₯Ό μ‚¬μš©
set1 = set([1,2,3,4,5])
set2 = set([4,5,6,7,8])

set1 | set2 # {1, 2, 3, 4, 5, 6, 7, 8}

 

πŸ“Œ 차집합 -

# 차집합: - λ₯Ό μ‚¬μš©

set1 = set([1,2,3,4,5])
set2 = set([4,5,6,7,8])

set1 - set2 # {1,2,3}

 

πŸ“Œ ꡐ집합 &

# ꡐ집합: & λ₯Ό μ‚¬μš©

set1 = set([1,2,3,4,5])
set2 = set([4,5,6,7,8])

set1 & set2 #{4,5}

 

 

 

μ°Έκ³ 

 

TimeComplexity - Python Wiki

This page documents the time-complexity (aka "Big O" or "Big Oh") of various operations in current CPython. Other Python implementations (or older or still-under development versions of CPython) may have slightly different performance characteristics. Howe

wiki.python.org

 

λ°˜μ‘ν˜•