Python 02 자료형② T, L, S, D

김민호·2021년 8월 23일
0

Python

목록 보기
2/16
post-thumbnail

숫자형, 문자열, 부울 -> 구체적인 값을 가진 자료형
컨테이너(container) : 튜플, 리스트, 딕셔너리
원소(element) : 컨테이너에 담긴 값(객체)

1. 튜플 ( )

  • 튜플(tuple) 생성 : a = ('X', 'Y', 'Z')
  • 원소로 모든 기본 자료형이 올 수 있고 튜플도 가능하며, 원소 구분은 콤마,로 함
  • 튜플은 그 요소값을 변경할 수 없음 -> 요소값을 삭제, 변경하려고 하면 오류
    (cf. 리스트[ ]는 변경 가능)
  • 이해 예시 1️⃣
a = ("apple")		
print(a, type(a))		
# => <class ‘str’>


b = ("apple",)		
print(b, type(b))		
# => <class ‘tuple’>

원소가 하나인 튜플을 생성할 경우 콤마를 안 붙이면 그냥 문자열로 인식함

  • 이해 예시 2️⃣
print(type((21.8, True)))
print(type((False,)))
print(type(("apple", "apple")))

인덱싱(indexing)

  • 인덱스로 원소를 꺼내는 것
  • 시퀀스(sequence) : 원소의 순서, 0부터 시작
  • 함수에 값을 전달할 때는 ( )를 사용하지만,
    컨테이너의 일부를 가리킬 때는 [ ] 사용

슬라이싱(slicing)

a = (1, 2, 3, 4, 5, 6)

print(a[0: 6: 2])	
# (1, 3, 5)
->  튜플을 [0: 6]으로 슬라이싱 한 후 간격을 2로 두고 필터링하라는 뜻

print(a[1: 6: 2])	
# (2, 4, 6)
->  튜플을 [1: 6]으로 슬라이싱 한 후 간격을 2로 두고 필터링하라는 뜻

튜플 연장

튜플 더하기

  • 튜플a + 튜플b : 튜플a의 오른쪽에 튜플b가 붙음
tu1 = (1, 2, 3)
tu2 = (9, 10, 11)
print(tu1+tu2)

#(1, 2, 3, 9, 10, 11)

튜플 곱하기

  • 튜플 * n
tu1 = (1, 2, 3)
print(tu1 * 3)

#(1, 2, 3, 1, 2, 3, 1, 2, 3)

튜플 길이

  • len(튜플)

2. 리스트 [ ]

  • list : [ele1, ele2, ele3, ... ]
  • 자료형명 : list
  • 어떠한 자료형도 요소로 가질 수 있고, 빈 리스트도 가능
  • 인덱싱, 슬라이싱 가능
  • 리스트끼리 +, * 연산 가능
    리스트 더하는 다른 방법 : list[n:n] = 추가할 내용
obj0 = [‘a’, ‘b’]
obj1 = [‘c’, ‘d’]
obj0[2:2] = obj1 	
print(obj0)
[’a’, ‘b’, ‘c’, ‘d’]
  • 리스트 길이 : len(list)

  • 리스트 값 수정

list1 = ["a", "b", "c", "d"]
list1[1]= 3
print(list1)
['a', 3, 'c', 'd']

리스트 관련 함수

  • del list[index] : 리스트 요소 삭제

  • list.append(element) : 리스트에 요소 추가. 맨 마지막에 추가됨

  • list.sort() : 리스트의 요소를 순서대로 정렬. 숫자, 알파벳순

  • list.reverse : 리스트를 역순 정렬. 순서를 맞추고 다시 역순으로 정렬하는 것이 아니라, 그냥 현재 리스트를 그대로 거꾸로 뒤집음

  • index(ele) : 해당 요소가 있으면 위치 값(인덱스)을 돌려줌. 없으면 오류

  • list.insert(index, ele) : index에 ele를 삽입. 기존 요소는 대체되는 것이 아니라 밀려남

  • list.remove(ele) : list에서 첫 번째로 나오는 ele 제거

  • list.pop() : 맨 마지막 요소를 반환하고 그 요소는 리스트에서 삭제 list.pop(index) : 해당 인덱스 요소를 반환하고 그 요소는 리스트에서 삭제

  • list.count(ele) : 리스트 안의 ele 개수 반환

  • list.extend(ele) : ele 값으로는 리스트만 올 수 있음.
    a.extend(4, 5)
    👉🏼 a += [4, 5]
    👉🏼 a = a + [4, 5]

3. 집합 { }

  • 생성 : set( ) 의 괄호 안에 리스트나 문자열을 입력하면 { }로 집합 생성
  • 자료형명 : set
  • {ele1, ele2, ele3, ... }
  • 수, 문자열, 부울 등을 원소로 저장할 수 있음
  • 하지만 튜플 ( ) 이외의 컨테이너를 원소로 저장 못 함!(튜플, 리스트와의 차이점)
  • 원소 중복 불가능
    👉🏼 자료형의 중복을 제거하기 위한 필터 역할로 종종 사용
  • 시퀀스가 없기 때문에 인덱스로 요소에 접근할 수 없음. 그래서 set자료형에 저장된 값을 인덱싱으로 접근하려면 리스트나 튜플로 형변환 후에 가능
    형변환하는 방법 : list(집합), tuple(집합)
# 인덱스로 요소에 접근할 때 뜨는 오류
TypeError: 'set' object is not subscriptable
  • 튜플, 리스트, 문자열과 다르게 + 연산자로 컨테이너 연장 불가능
    👉🏼 집합만의 독특한 연산자 활용
  • 비어 있는 집합은 { } 이 아니라 set( )
    { }는 비어있는 딕셔너리(dictionary)

집합 연산자

  • A | B : 합집합 = A.union(B)
  • A & B : 교집합 = A.intersection(B)
  • A - B : 차집합 = A.difference(B)
  • A ^ B : 대칭차집합. 전체에서 교집합을 뺀 나머지

집합 관련 함수

  • set.add(ele) : 값 1개 추가
  • set.update(list) : 값 여러 개 추가
  • set.remove(ele) : 특정 값 제거

4. 딕셔너리 { }

  • { key0 : value0, key1 : value1, key2 : value2, ... }
  • 자료형 : dict
  • 집합과 딕셔너리 모두 { }를 사용
  • 비어있는 딕셔너리 { }
  • 어떤 자료형도 사용 가능(숫자형, 문자열, 부울, 튜플, 리스트, 집합, 딕셔너리)
  • key가 index 역할. key는 유일해야 함. 중복 시 마지막 키-값 쌍 반환
  • value는 중복돼도 상관없음
  • 컨테이너 간의 + 연산은 시퀀스가 있는 것만 가능. 딕셔너리 불가능하고 함수써서 가능
  • key에 리스트, 딕셔너리는 사용 불가능. 튜플은 사용 가능
    👉🏼 리스트,딕셔너리는 값이 변할 수 있고 튜플은 변하지 않기 때문.

딕셔너리 쌍 추가, 삭제

  • dict[key] = 'value'
a = { 1: 'a', 2: 'b', 3:'c'}
a[1] = 'z'
print(a)
# {1: 'z', 2: 'b', 3: 'c'}
  • del dict[key]
a = {1: 'z', 2: 'b', 3: 'c'}
del a[3]
print(a)
#{1: 'z', 2: 'b'}

딕셔너리 관련 함수

  • dict.key() : key 리스트 반환
a = { 1: 'a', 2: 'b', 3:'c'}
print(a.keys())
#dict_keys([1, 2, 3])
  • a.value() : value 리스트 반환
  • a.items() : key:value 쌍 반환
  • a.clear() : key:value 쌍 모두 지우기
  • a.get() : key로 value 얻기
    a.get(x, '디폴트값') : 찾으려는 key값이 없을 경우 미리 정해둔 디폴트값 반환
  • 'key' in dict : true or false 반환

5. 형 변환

  • 인수를 전달받는 객체는 크게 둘 = 함수, 자료형
  • 함수 : 전달받은 인수로 작업 수행
  • 자료형 : 전달받은 인수로 해당 자료형의 특성을 공유하는 객체 생성(=인스턴스)
  • 형변환 방법 : 자료형명(원본 객체)
  • 전처리(preprocessing) : 형변환에 적합하지 않은 객체를 변환 전에 용도에 맞게 다듬는 작업
  • 원소 제거할 때 튜플과 리스트 간 형변환 자주 쓰임
  • 중복 원소 제거할 때는 튜플과 집합 간 형변환 자주 쓰임
a = ("한국", "미국", "중국", "미국") # 튜플 원소 중복
a =set(a) # 튜플을 집합으로 형변환
a = tuple(a) # 다시 튜플로 복귀
print(a)
  • 비어있는 객체 판정 (=False)
    • str - ""
    • int - 0
    • float - 0.0
    • list - []
    • tuple - ()
    • set - set()
    • dict - {}

생각해 볼 거리

1. Set과 Dictionary의 차이

  • 공통점 : 두 컨테이너는 중괄호{ }로 원소를 저장
  • 차이점
    • Set : 튜플 이외의 컨테이너를 원소로 저장할 수 없음
               원소 중복, 변경 불가능
               시퀀스가 없어서 index로 요소에 접근할 수 없음
               비어있는 집합은 set()로 표현
    • Dictionary : 어떤 자료형도 사용 가능
                           key는 유일해야 하고, value는 중복 가능
                           key가 index 역할을 함
                           비어있는 딕셔너리는 {}로 표현

2. List와 Tuple의 차이

  • 공통점 : 원소로 모든 기본 자료형 가능
  • 차이점
    • List : 요소값 변경, 삭제, 수정 가능
    • Tuple : 요소값 삭제, 변경 불가. 연장은 가능
profile
개발자로서의 삶은 https://velog.io/@maxminos 에서 기록하고 있습니다 😀

0개의 댓글