728x90
반응형
SMALL

1. 세트(Set)

  • 수학의 집합과 비슷한 형태로 순사가 없어 어떤값이 먼저 나올지 알 수 없고, 중복되는 데이터를 허용하지 않음
  • 딕셔너리처럼 중괄호{} 를 사용해서 선언하지만 key는 존재하지 않고 value만 존재
 

1-1. set 만들기

 

 
s1 = {} # 값이 비어있으면 데이터를 알수없어 딕셔너리가 생성 됌
print(s1)
print(type(s1))
 
{}
<class 'dict'>
 

 
s1 = {1, 3, 5, 7} # 값만 저장하게되면 set이 생성됌
print(s1)
print(type(s1))
 
{1, 3, 5, 7}
<class 'set'>
 

 
 
# list를 set으로 변환하기
li1 = [1, 3, 5, 7]
s2 = set(li1)
print(s2)
 
{1, 3, 5, 7}

 
# 중복된 값이 사라져있다.
s3 = {1, 3, 5, 3, 7, 9, 1}
print(s3)
 
{1, 3, 5, 7, 9}

 
li2 = [1, 3, 5, 3, 7, 9, 1]
print(li2)
s4 = set(li2) # set으로 변환하기
print(s4)
s4 = list(s4) # 다시 list로 변환
print(s4)
 
[1, 3, 5, 3, 7, 9, 1]
{1, 3, 5, 7, 9}
[1, 3, 5, 7, 9]

 
print(3 in s4)     # True
print(8 in s4)     # False
print(8 not in s4) # True
 
True
False
True
 

1-2. set 함수


 
 
# add(): set에 단일 데이터를 추가
s1 = {100, 200}
s1.add(150) # inplace 연산이라 바로 적용됌

print(s1)
s1.add(50) # 순서가 일정하지 않음
print(s1)
 
{200, 100, 150}
{200, 50, 100, 150}

 
# update(): set에 여러 데이터를 한번에 추가
s2 = {10, 20, 30}
s2.update([40, 50, 60, 20]) # 여러개를 넣을때는 대괄호 사용
print(s2)                   # 중복된 데이터는 사라진다.
 
{40, 10, 50, 20, 60, 30}
 

 
# remove(): set의 데이터를 제거, 제가할 데이터가 없으면 에러
s2.remove(50)
print(s2)
 
{40, 10, 20, 60, 30}

 
s2.remove(50) # KeyError: 50 없는것을 제거하려해서 에러
print(s2)
 
없는 것을 제거하려고 해서 에러가뜸

 


 
# discard(): set의 데이터를 제거. 제거할 데이터가 없어도 에러가 발생X
s2.discard(30)
print(s2)
 
{40, 10, 20, 60}

 
s2.discard(30)
print(s2)
 
{40, 10, 20, 60}

 
# copy(): set을 복사
# id(): 저장된 메모리 주소를 10진수로 표현
s3 = {10, 20, 30}
s4 = s3.copy()
print(s3)
print(s4)

print(id(s3))
print(id(s4))
# s3, s4는 다른 주소를 가지고 있다.
 
{10, 20, 30}
{10, 20, 30}
140193980010560
140193846584480
 

1-3. set의 연산자


 
 
 
s1 = {10, 20, 30, 40, 50}
s2 = {30, 40, 50, 60, 70}
 

 
# 합집합
result = s1 | s2
print(result)
result = s1.union(s2)
print(result)
 
{70, 40, 10, 50, 20, 60, 30}
{70, 40, 10, 50, 20, 60, 30}

 
# 교집합
result = s1 & s2
print(result)
result = s1.intersection(s2)
print(result)
 
{40, 50, 30}
{40, 50, 30}

 
# 차집합
result = s1 - s2
print(result)
result = s2 - s1
print(result)

result = s1.difference(s2)
print(result)
result = s2.difference(s1)
print(result)
 
{10, 20}
{60, 70}
{10, 20}
{60, 70}
 

 
 
# 대칭 차집합  (합집합 - 교집합)
result = s1 ^ s2
print(result)
result = s1.symmetric_difference(s2)
print(result)
 
{20, 70, 10, 60}
{20, 70, 10, 60}

2. set와 zip()함수


 
 
 
string = 'apple'
li = [1, 2, 3, 4, 5]
tu = ('김사과', '반하나', '오렌지', '이메론', '채애리')
 
 

 
print(zip(string, li, tu)) # <zip object at 0x7f8148338900> zip객체가 만들어진다
 
<zip object at 0x7f816c74de80>

 
print(list(zip(string, li, tu))) # 튜플로 반환된 zip객체를 list로 출력
 
[('a', 1, '김사과'), ('p', 2, '반하나'), ('p', 3, '오렌지'), ('l', 4, '이메론'), ('e', 5, '채애리')]
 

 
print(set(zip(string, li, tu))) # 튜플로 반환된 zip객체를 set로 출력
 
{('a', 1, '김사과'), ('p', 3, '오렌지'), ('e', 5, '채애리'), ('p', 2, '반하나'), ('l', 4, '이메론')}

 
 
print(dict(zip(string, li, tu))) # ValueError: dictionary update sequence element #0 has length 3; 2 is required
# 키랑 벨류를 분리 해주지않아서
 
 

# 키랑 벨류를 분리해줄수 없다고 에러가 뜬것


 
 
 
 
 
{1: '김사과', 2: '반하나', 3: '오렌지', 4: '이메론', 5: '채애리'}
 

 
 
 
 
 
{'a': '김사과', 'p': '오렌지', 'l': '이메론', 'e': '채애리'}
728x90
반응형
LIST

'파이썬' 카테고리의 다른 글

변수의 범위  (0) 2023.03.09
사용자 정의 함수(함수만들기)  (0) 2023.03.09
자료구조- 딕셔너리(dictionary)  (0) 2023.03.08
제어문- 반복문(while, for)  (0) 2023.03.07
제어문- 조건문(if 함수)  (0) 2023.03.07

+ Recent posts