본문 바로가기
PROGRAMING📚/Python📑

Python-Set

Ta이니 2024. 11. 26.
728x90
반응형

💡

Set(중복과 순서가 없는 자료형)

순서가 없기 때문에 인덱싱이 지원 안됨

s = set()
print(s, type(s))

s= set([1,2,3,4,5])
print(s, type(s))

s = set("HELLO")
print(s, type(s))

set() <class 'set'>
{1, 2, 3, 4, 5} <class 'set'>
{'E', 'O', 'L', 'H'} <class 'set'>

s1 = {1,2,3,4,5}
s2 = {3,4,5,6,7}

print(F"합집합 : {s1} ⋃ {s2}")
print(s1.union((s2)))
print(set.union(s1, s2))
print(s1 | s2)

합집합 : {1, 2, 3, 4, 5} ⋃ {3, 4, 5, 6, 7}
= {1, 2, 3, 4, 5, 6, 7}
{1, 2, 3, 4, 5, 6, 7}
{1, 2, 3, 4, 5, 6, 7}
{1, 2, 3, 4, 5, 6, 7}

s1 = {1,2,3,4,5}
s2 = {3,4,5,6,7}

print(f"교집합 : {s1} ⋂ {s2}")
print(s1.intersection((s2)))
print(set.intersection(s1,s2))
print(s1 & s2)

교집합 : {1, 2, 3, 4, 5} ⋂ {3, 4, 5, 6, 7}
{3, 4, 5}
{3, 4, 5}
{3, 4, 5}

s1 = {1,2,3,4,5}
s2 = {3,4,5,6,7}

print(f"차집합 : {s1} - {s2}")
print(s1.difference((s2)))
print(set.difference(s1,s2))
print(s1 - s2)

차집합 : {1, 2, 3, 4, 5} - {3, 4, 5, 6, 7}
{1, 2}
{1, 2}
{1, 2}
{0, 1, 2, 3, 4}

s1 = {1,2,3,4,5}
s2 = {3,4,5,6,7}

print(f"대칭 차집합(XOR) : {s1} ^ {s2}")
print(s1.symmetric_difference(s2))
print(set.symmetric_difference(s1,s2))
print(s1 ^ s2)

대칭 차집합 : {1, 2, 3, 4, 5} ^ {3, 4, 5, 6, 7}
{1, 2, 6, 7}
{1, 2, 6, 7}
{1, 2, 6, 7}

print(f"할당 연산자(기존의 집합에 연산을 진행) : | ")
a = {1,2,3,4}
print(id(a))
a |= {3,4,5,6}
print(a, id(a)) # 주소 동일

a = {1,2,3,4}
a &= {3,4,5,6}
print(a, id(a)) # 주소 동일

a = {1,2,3,4}
a -= {3,4,5,6}
print(a, id(a)) # 주소 동일

a = {1,2,3,4}
a ^= {3,4,5,6}
print(a, id(a)) # 주소 동일

할당 연산자(기존의 집합에 연산을 진행) : |
2427977984352
{1, 2, 3, 4, 5, 6} 2427977984352
{3, 4} 2427977981664
{1, 2} 2427977984352
{1, 2, 5, 6} 2427977981664

s3 = set(range(5))
print(s3)
결과: {0, 1, 2, 3, 4}

s=set('기러기')
print(s)
결과: {'기', '러'}

# set은 list, dict 와 달리 set 안에 set을 넣을 수 없다
s= {
  {1,2,3},
  {3,4,5}
}
print(s)
결과 : #에러발생 TypeError: unhashable type: 'set'

# {}: set , []:리스트 , (): 튜플 , {key, value}: dict
s={}
print("s ={}", type(s))
결과 : s ={} <class 'dict'> # 주의 , 빈 중괄호는 dict가 됨
print('set의 관계연산')
a = {1,2,3,4}
print('부분집합 issuperset<=',a<={1,2,3,4})
print(a.issubset({1,2,3,4}))
print('진부분집합 <', a< {1,2,3,4,5})
print('상위 집합 issuperset >= ', a>={1,2,3,4})
print(a.issuperset({1,2,3,4}))
print('진상위집합 >=', a>={1,2,3})

[결과]
부분집합 issuperset<= True
True
진부분집합 < True
상위 집합 issuperset >=  True
True
진상위집합 >= True

print(a == {1,2,3,4})
print(a=={3,2,1,4}) # 순서 상관없음
print('겹침여부 isdisjoint: ', a.isdisjoint({5,6,7,8})) 
[결과]
겹침여부 isdisjoint:  True
겹침여부 isdisjoint:  False

a.add(5) # 추가
a.remove(5) # 삭제 #element 가 없으면 Error
a.discard(9) #element 가 없어도 OK
a.pop() #임의의 element를 삭제
[결과]
{1, 2, 3, 4, 5}
{1, 2, 3, 4}
{1, 2, 3, 4}
{2, 3, 4}
a={1,2,3,4}; print(a, id(a))
b=a #주소를 복사
print(b, id(b))

[결과]
{1, 2, 3, 4} 2254011228320
{1, 2, 3, 4} 2254011228320

print(a is b)
b.add(5)
b=a.copy() #a와 b는 다른 set
print(id(a),id(b))

[결과] 1577749569696 1577749565440
for i in a: print(i, end=" ", sep=",")
print()

# 방법 1
for i in {1,2,3,4}: print(i, end=" ", sep=",")
a= {i for i in 'pineapple' if i not in "apl"}

# 방법 2
for i in {1,2,3,4}: print(i, end=" ", sep=",")
a= set(i for i in 'pineapple' if i not in "apl")

print(a)

[결과]
1 2 3 4 
1 2 3 4 {'i', 'e', 'n'}

집합의 내용을 수정 불가 frozenset()

# 집합의 내용 수정 안됨, 2차원 이상 생성 가능

a= frozenset(range(10))
a= frozenset({
  frozenset(range(1,2)),
  frozenset(range(3, 5))
})
print(a)
728x90
반응형

'PROGRAMING📚 > Python📑' 카테고리의 다른 글

Python - tkinter  (0) 2024.11.28
Python -dict  (0) 2024.11.27
[Python]Tuple  (0) 2024.11.25
[Python] 리스트 List  (0) 2024.11.24
[Python]반복문 roof  (0) 2024.11.23

댓글