728x90
반응형
SMALL
1. 세트(set)
- 수학의 집합과 비슷한 형태로 순서가 없어서 어떤 값이 먼저 나올지 알 수 없고, 중복되는 데이터를 허용하지 않음.
- 딕셔너리처럼 중괄호를 사용해서 선언하지만, key는 존재하지 않고 value만 존재
1-1. set 만들기
- {값1, 값2, ...}
- set()
set1 ={}
print(set1)
>>> {}
print(type(set1))
>>> <class 'dict'> # 빈 중괄호는 dict로 만듬
set1 = {1, 3, 5, 7}
print(set1)
>>> {1, 3, 5, 7}
print(type(set1))
>>> <class 'set'> # 값을 넣어주면 set이 됨
set3 = {1, 3, 5, 3, 7, 9, 1}
print(set3)
>>> {1, 3, 5, 7, 9} # 중복데이터 허용하지 않음
li1 = [1, 3, 5, 7]
set2 = set(li1)
print(set2)
>>> {1, 3, 5, 7}
print(type(set2))
>>> <class 'set'>
li2 = [1, 3, 5, 3, 7, 9, 1]
print(li2)
>>> [1, 3, 5, 3, 7, 9, 1] # 리스트는 데이터의 중복 허용
set4 = set(li2)
print(set4)
>>> {1, 3, 5, 7, 9} # 리스트에서 중복된 데이터를 제거하고 unique한 값을 알 수 있음
- set에서 요소가 있는지 in을 통해 알아보자.
set4 = {1, 3, 5, 7, 9}
print(3 in set4)
>>> True
print(8 in set4)
>>> False
print(8 not in set4)
>>> True # False의 반대
2. set의 함수
2-1. add()
- set에 단일 데이터를 추가
- inplace 연산
set5 = {100,200}
set5.add(150)
print(set5)
>>> {200, 100, 150} # inplace연산이 됨
set5.add(50)
print(set5)
>>> {200, 50, 100, 150} # 순서가 일정하지 않음
2-2. update()
- set에 여러 데이터를 한번에 추가
- 여러 데이터를 한번에 넣을 때는 대괄호로 감쌈
set6 = {10, 20, 30}
set6.update([40, 50, 60, 20])
print(set6)
>>> {40, 10, 50, 20, 60, 30} # 중복된 데이터를 넣어도 중복을 허용하지 않음
2-3. remove()
- set의 데이터를 제거
- 제거할 데이터가 없으면 에러
- inplace 연산
set6 = {40, 10, 50, 20, 60, 30}
set6.remove(50)
print(set6)
>>> {40, 10, 20, 60, 30} # inplace연산
# 없는 데이터를 제거하면 에러
set6.remove(50) # KeyError: 50
print(set6)
>>> KeyError: 50
2-4. discard()
- set의 데이터를 제거
- 제거할 데이터가 없어도 에러가 발생하지 않음
set6.discard(30)
print(set6)
>>> {40, 10, 20, 60}
# 없는 데이터를 제거해도 에러나지 않음
set6.discard(30)
print(set6)
>>> {40, 10, 20, 60}
2-5. copy()
- set을 복사
- 다른 메모리 주소를 가짐
- id(): 저장된 메모리 주소를 10진수로 표현, 주소값을 비교할 때 사용
# 대입 연산자를 사용 했을 때 주소값
li1 = [1,2,3,4]
li2 = li1
print(id(li1))
>>> 139812090014080
print(id(li2))
>>> 139812090014080 # 주소값 동일
set7 = {10, 20, 30}
set8 = set7.copy()
print(set7)
>>> {10, 20, 30}
print(set8)
>>> {10, 20, 30}
print(id(set7))
>>> 139812090366432
print(id(set8))
>>> 139812090367776 # 주소값 다름
3. set의 연산자
3-1. 합집합
- 여러 set의 데이터를 합침
- 중복 허용 하지 않음
- |, union()
s1 = {10, 20, 30, 40, 50}
s2 = {30, 40, 50, 60, 70}
result = s1 | s2
print(result)
>>> {70, 40, 10, 50, 20, 60, 30}
result = s1.union(s2)
print(result)
>>> {70, 40, 10, 50, 20, 60, 30}
3-2. 교집합
- 여러 set 중 동일한 요소만 반환
- &, intersection()
s1 = {10, 20, 30, 40, 50}
s2 = {30, 40, 50, 60, 70}
result = s1 & s2
print(result)
>>> {40, 50, 30}
result = s1.intersection(s2)
print(result)
>>> {40, 50, 30}
3-3. 차집합
- s1에 포함되지만 s2에는 포함되지 않은 s1의 요소들만 반환
- -, difference()
s1 = {10, 20, 30, 40, 50}
s2 = {30, 40, 50, 60, 70}
result = s1 - s2
print(result)
>>> {10, 20}
result = s1.difference(s2)
print(result)
>>> {10, 20}
3-4. 대칭 차집합
- s1과 s2의 교집합 요소를 제외한 요소들을 반환
- ^, symmestric_differences
s1 = {10, 20, 30, 40, 50}
s2 = {30, 40, 50, 60, 70}
result = s1 ^ s2
print(result)
>>> {20, 70, 10, 60}
result = s1.symmetric_difference(s2)
print(result)
>>> {20, 70, 10, 60}
4. set과 zip()함수
string = 'apple'
li = [1,2,3,4,5]
tu = ['김사과', '반하나', '오렌지', '이메론', '채애리']
print(zip(string, li, tu))
>>> <zip object at 0x7f28bf87af00> # zip객체가 만들어짐
# 각 요소들을 묶어 리스트로 반환
print(list(zip(string, li, tu)))
>>> [('a', 1, '김사과'), ('p', 2, '반하나'), ('p', 3, '오렌지'), ('l', 4, '이메론'), ('e', 5, '채애리')]
# zip함수로 각 요소들을 묶어 set형식으로 반환
print(set(zip(string, li, tu)))
>>> {('a', 1, '김사과'), ('p', 3, '오렌지'), ('l', 4, '이메론'), ('e', 5, '채애리'), ('p', 2, '반하나')}
# 딕셔너리 구조는 key와 value 두가지 요소일 때만 만들수 있음
print(dict(zip(li, tu)))
>>> {1: '김사과', 2: '반하나', 3: '오렌지', 4: '이메론', 5: '채애리'}
# dict의 key는 중복을 허용하지 않기 때문에 하나의 데이터만 남음
# set은 순서가 없기 때문에 어떤 데이터가 남을지 알 수 없음
print(dict(zip(string, tu)))
>>> {'a': '김사과', 'p': '오렌지', 'l': '이메론', 'e': '채애리'}
728x90
반응형
LIST
'Python > Basic' 카테고리의 다른 글
[파이썬, Python] 함수 - 2️⃣ 콜백 함수(Callback Function) (0) | 2023.03.09 |
---|---|
[파이썬, Python] 함수 - 1️⃣ 사용자 정의 함수 (0) | 2023.03.09 |
[파이썬, Python] 자료구조(Data Structure) - 3️⃣ 딕셔너리(Dictionary, dict) (0) | 2023.03.08 |
[파이썬, Python] 제어문 - 2️⃣ 반복문(2)_다중반복문, 컴프리헨션(Comprehension) (0) | 2023.03.08 |
[파이썬, Python] 제어문 - 2️⃣ 반복문(1)_bool(), 대입연산자, while문, for in 문, zip함수, enumerate함수 (0) | 2023.03.08 |