KT 에이블스쿨 복습

[KT 에이블스쿨 5기] DX트랙 3일차 복습_튜플, 집합, 딕셔너리

리니끄적 2024. 2. 24. 13:17
**셀프 복습용으로 작성한 것이라 실수가 있을 수 있습니다!
혹시 실수를 발견하시면 댓글로 알려주시면 감사드리겠습니다 :)

 

[파이썬 기초] 데이터 다루기_이장래 강사님

 

구글 드라이브에 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', '문자열')   #'문자열' 출력