본문 바로가기
코딩 연습/코딩배우기

[python] 순서와 중복을 허용하지 않는 파이썬 set(), frozenset() 함수

by good4me 2020. 9. 3.

goodthings4me.tistory.com

 

# 파이썬의 시퀀스 타입(sequence type)은 list, tuple, string, range
# set(), frozenset()는 집합 관련 자료형으로 셋 타입이라 하며, iterable 객체이고,
# set()은 저장된 값의 순서정보가 없고 중복된 값을 허용(저장)도 않는다.

print(set('anaconda'))
# {'o', 'a', 'n', 'c', 'd'}

# set() 정의는, 
s = {}
print(type(s)) # <class 'dict'> dict 정의임

s1 = {1,}
print(type(s1)) # <class 'set'> set 정의됨

s2 = set()
print(type(s2)) # <class 'set'>

# 중괄호 내 값의 형태에 따라 type이 결정됨

#sd1 = set(1, 2, 3)  # 정의 불가
# TypeError: set expected at most 1 argument, got 3
sd2 = {1, 2, 3}  # 정의 가능


# frozenset()
fs1 = frozenset(['a', 'b', 'c', 'd'])
fs2 = frozenset(['d', 'f', 'e', 'a'])

fs3 = fs1 & fs2  # 교집합 연산
print(fs3)  # frozenset({'a', 'd'})

s3 = set(['a', 'b', 'c', 'd'])
s4 = set(['d', 'f', 'e', 'a'])
print(s3 & s4)  # {'a', 'd'}

 

good4me.co.kr

# set()과 frozenset()의 차이 : set()은 값의 변경(추가, 삭제 등) 가능하나 frozenset은 변경 불가(immutable 객체)

# set의 관련 연산자들은 frozenset에 적용 불가함

st = {1, 2, 3, 4, 5, 6}
print(type(st))
st.add(9)
st.discard(1)
print(st)  # {2, 3, 4, 5, 6, 9}


fst = frozenset((1, 2, 3, 4, 5, 6))
#fst.add(9)
# AttributeError: 'frozenset' object has no attribute 'add'

 

# set 컴프리헨션

sc1 = {s for s in range(1, 6)}
print(sc1)  # {1, 2, 3, 4, 5}

sc2 = {s**2 for s in sc1}
print(sc2)  # {1, 4, 9, 16, 25}

sc3 = {s for s in sc2 if s % 2}
print(sc3)  # {1, 9, 25}

 

[참고자료] 윤성우의 열혈파이썬 중급편

 

 

댓글