[KT 에이블스쿨 5기] DX트랙 3일차 복습_튜플, 집합, 딕셔너리
혹시 실수를 발견하시면 댓글로 알려주시면 감사드리겠습니다 :)
[파이썬 기초] 데이터 다루기_이장래 강사님
구글 드라이브에 python 파일 옮긴 후 Google Colaboratory로 실습
04 튜플
튜플은 리스트와 비슷한 자료형, 대괄호가 아닌 소괄호(())를 사용해서 표현
튜플은 한 번 만들면 요소의 값을 바꿀 수 없음 → 리스트와 다른 점
그 외에는 리스트와 같은 특성을 가짐
튜플 만들기
1) 빈 튜플 만들기: score = () & score = tuple()
2) 요소가 하나인 튜플 만들기: score = (90) 은 score = 90과 다름 없음!
score = (90,) 가 맞는 표현 **튜플의 소괄호는 생략할 수 있다!
3) 다양한 형태의 튜플
score = (10, 20, 30, ('A', 'B', 'C'))
nums = tuple(range(1,5)) #(1, 2, 3, 4, 5)
→ 튜플은 값이 변하지 않는 다는 속성 때문에 딕셔너리의 키로 사용할 수 있음 (리스트는 X)
튜플 활용
1) 괄호 생략
a = 10
b = 20
c = a, b
print(c) #(10, 20)
2) 여러 변수에 동시에 값을 대입 가능
a, b, c = 10, 20, 30
print(a) #10
print(b) #20
print(c) #30
3) 두 변수의 값 교환 가능
a, b = 10, 20
print(a, b) #(10, 20)
c = a
a = b
b = c
print(a, b) #(20, 10)
a, b = 10, 20
print('a =', a, 'b =', b) #a = 10, b = 20
a, b = b, a
print('a =', a, 'b =', b) #a = 20, b = 10
4) 함수 리턴값을 두 변수에 대입할 수 있음
a, b = 45, 20
x, y = divmod(a, b) #(몫, 나머지) 튜플형태로 출력하는 함
print(x, y) #2 5
튜플 인덱싱과 슬라이싱 / 연산
리스트와 같은 원리, +(더하기) 합과 *(곱하기) 반복
05 집합
집합 연산(교집합, 합집합, 차집합, 대칭 차집합)을 위한 자료형
중복을 허용하지 않고, 중복된 원소는 하나만 제외하고 모두 무시됨
원소의 순서는 전혀 의미 없음 → 인덱싱과 슬라이싱 불가!
집합 {1, 2}와 {1, 1, 1, 2, 2}와 {2, 1} 모두 같은 집합
집합 만들기
1) 정수를 갖는 집합: nums = {1, 2, 3}
2) 문자열을 갖는 집합: nums = {'A', 'B', 'C'}
3) 여러 자료형을 갖는 집합: nums = {1, 2, 3, 'A', 'B', 'C'}
집합으로 자료형 변환
set(): 다른 자료형을 집합으로 변환
집합은 요소의 순서가 없어 변환 후 요소 순서가 어떻게 될 지 알 수 없음, 중복된 문자를 제거
1) 문자열 → 집합
hello = set('잘지내지요?')
print(hello) #{'?', '내', '요', '잘', '지'}
2) range() → 집합
nums = set(range(0, 10))
print(nums) #{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
3) 리스트 → 집합
member = ['김똥개', '나구름', '정하늘', '김똥개', '박호수']
member1 = set(member)
print(member1) #{'김똥개', '나구름', '정하늘', '박호수'} **중복된 요소는 제거됨
4) 튜플 → 집합
member = ['김똥개', '나구름', '정하늘', '김똥개', '박호수']
member1 = set(member)
print(member1) #{'김똥개', '나구름', '정하늘', '박호수'} **중복된 요소는 제거됨
집합 정보 확인
len() 함수로 집합에 포함된 원소 개수 확인
in 연산자로 집합에 요소가 속해 있는지 확인
1) len(): 원소 개수 확인
2) in: 원소 포함 여부 확인 (True, False로 결과 출력)
3) 리스트 중복 요소 제거
- 집합은 중복된 요소를 갖지 않음 → 리스트에서 중복된 요소를 제거할 수 있음
nums = [12, 45, 23, 21, 36, 28, 12, 36, 35, 28, 45, 63, 12, 21]
nums = set(nums) # 리스트 --> 집합 변환
nums = list(nums) # 집합 --> 리스트 변환 #nums.sort() -> 오름차순으로 정렬
nums # [35, 36, 12, 45, 21, 23, 28, 63] 순서 바뀐 채로 출력됨
4) 튜플 중복 요소 제거
nums = (12, 45, 23, 21, 36, 28, 12, 36, 35, 28, 45, 63, 12, 21)
nums = tuple(set(nums)) # 튜플 --> 집합 --> 튜플 변환
nums #(35, 36, 12, 45, 21, 23, 28, 63)
집합 연산
1) union()메서드, |: 합집합 연산
2) intersection()메서드, &:교집합 연산
3) difference(), -: 차집합 연산
4) symmetric_difference(), ^: 대칭 차집합 연산
집합 연산 활용
1) 리스트 속 중복 요소 확인 (교집합 활용)
nums1 = [1, 5, 7, 9, 11]
nums2 = [1, 7, 9, 14, 17]
nums = set(nums1) & set(nums2) # 집합 변환 후 교집합 구하기
nums = list(nums) # 집합 --> 리스트 변환
nums.sort()
nums #[1.7.9]
2) 리스트 중복 없이 합치기 (합집합 활용)
nums1 = [1, 5, 7, 9, 11]
nums2 = [1, 7, 9, 14, 17]
nums = set(nums1) | set(nums2) # 집합 변환 후 합집합 구하기
nums = list(nums) # 집합 --> 리스트 변환
nums #[5, 11, 14,17]
집합 관련 메서드
1) add(): 순서는 상관없이 요소 하나 추가
2) update(): 여러 요소 추가, 변경이 아닌 추가
3) pop(): 무작위 한 요소 삭제, 삭제되는 요소를 반환
deleted = member.set.pop() 이런 식으로 선언
4) remove(): 요소 삭제(없으면 오류)
5) discard(): 요소 삭제(없으면 무시)
6) clear(): 모든 원소 삭제
06 딕셔너리
집합과 마찬가지로 중괄호({})를 사용해 선언
{Key1:Value1, Key2:Value2, Key3:Value3} 형태를 가지므로 집합과 구분됨
딕셔너리 만들기
1) 일정한 정보를 갖는 딕셔너리
word = {’love’ : ‘사랑’, ‘happy’ : ‘행복’, ‘dream’ : ‘꿈’} #’happy’: 기쁨
word[’dream’] #꿈
키는 하나밖에 사용 못하기 때문에 happy는 key 불러온 것, Value는 두 번째 나온 값을 불러온 것
2) 다양한 정보를 갖는 딕셔너리
리스트나 튜플을 Value로 가질 수 있음
member2 = {'이름': '가나다',
'취미': ['독서', '여행', '걷기']}
member2 #{'이름': '가나다', '취미': ['독서', '여행', '걷기']}
3) 숫자가 Key인 경우
nums = {1:1, 2:24, 3:35}
4) 같은 Key 무시
word = {’love’ : ‘사랑’, ‘happy’ : ‘행복’, ‘dream’ : ‘꿈’, ‘happy’ : ‘기쁘’ } #’happy’: 기쁨
word[’dream’] #꿈
키는 하나밖에 사용 못하기 때문에 happy는 key 불러온 것, Value는 두 번째 나온 값을 불러온 것
[참고] Key가 될 수 없는 리스트
- 튜플은 변경 불가능한 자료형 → Key가 될 수 있음
- 리스트는 변경 가능한 자료형 → Key가 될 수 없음
딕셔너리로 자료형 변환
dict(): Key:Value 형태를 가질 수 있는 자료형을 딕셔너리로 변환 (대부분 리스트로 딕셔너리를 만듦, 튜플도 가능)
members = [['김나리', 100],
['나지인', 90],
['박지이', 90],
['최구리', 95]]
member_dic = dict(members) #딕셔너리로 변환
member_dic #{'김나리': 100, '나지인': 90, '박지이': 90, '최구리': 95}
딕셔너리 조회
Key를 사용해 Value를 찾는 방식으로 조회 → 딕셔너리 [’Key’]
in 연산자를 사용해 해당 key가 있는지 확인 가능
딕셔너리 변경, 추가와 삭제
1) 변경과 추가
인덱스 대신 Key로 찾아 변경한다는 것 외, 리스트와 같은 원리
딕셔너리[’Key’] = 변경할 Value
없는 Key로 변경하면 Key:Value 형태로 추가됨!
2) 삭제
del 딕셔너리[’Key’]
pop() 메서드 사용하면 Key를 지정해 요소를 삭제 → 삭제된 요소의 Value를 반환 받음
popitem() 메서드로 Key 지정 없이 마지막 요소부터 하나씩 삭제 가능
모든 요소 삭제 딕셔너리 = {}
딕셔너리 관련 메서드
1) keys(): 모든 key 정보를 확인
member_keys(list(member.keys()): 모든 키를 리스트로 만듦
member_keys = list(member)도 가능
2) values(): 모든 value 정보를 확인
3) items(): 모든 key,value 확인 (key, value) 형태로 출력
4) clear(): 모든 요소 삭제
5) get(): key를 지정해 value를 찾을 수 있음
딕셔너리.get('없는 key') #오류없이 아무일도 일어나지 않음
딕셔너리.get('없는 key', '문자열') #'문자열' 출력