[python] Tech(1) 튜플(tuple), 리스트(list), 셋(set), 딕셔너리(dict)

Min Kim·2023년 3월 11일
0

Python

목록 보기
1/2

들어가기 전에


튜플(tuple), 리스트(list), 셋(set), 딕셔너리(dict)에 대해 알아봅시다.

1. 개념 비교


Video Label

  • list : 여려 가지 형태의 변수를 하나의 순서가 있는 배열로 묶어 놓은 형태 (Sequence Type)
  • tuple : 리스트와 유사하지만 요소의 수정이 불가능한 리스트 (Sequence Type)
  • set : 순서가 없고 중복을 혀용하지 않음 (Set Type)
  • dictionary : Key와 Value 형태로 데이터를 저장함 (Mapping)

😜 추가 지식

  • Sequence Type의 공통 특징
    +(결합), *(반복) 연산자
a = [1,2,3]               | a = [1,2,3]
b = [4,5,6]               | b = 2
print(a+b)                | print(a*b)
# [1,2,3,4,5,6]           | # [1,2,3,1,2,3]

인덱싱(Indexing) & 슬라이싱(Slicing)

  • 슬라이싱 : 연속적인 객체들에(예: 리스트, 튜플, 문자열) 범위를 지정해 선택해서 객체들을 가져오는 방법 및 표기법
  • 인덱싱 : 연속적인 객체(리스트, 튜플, 문자열)에 부여된 번호
a = [1,2,3,4,5]              
print(a)      # [1,2,3,4,5]  
print(a[0])   # 1            
print(a[-1])  # 5 
---
print(a[:3])  # [1,2,3]
print(a[2:])  # [3,4,5]

2. 리스트(LIST)


  • 여러 가지 형태의 값을 하나의 순서가 있는 배열 형태로 묶어 놓은 것
    ex) x=[9,'a','hello',[1,3]]
  • 파이썬에서 가장 많이 사용되며, 유연한 구조의 데이터 타입
  • 리스트 내의 항목들은 쉼표로 구분하고 사각 괄호 [] 안에 포함됨
  • 슬라이싱을 이용하여 리스트의 일정 범위 항목을 쪼개어 가져오거나 한 항목을 가져올 수 있음
  • 리스트의 각 항목은 변경이 가능
    ex) x[0] = 10
  • list + list 형식으로 서로 다른 리스트를 붙임 가능
  • 리스트 생성

    • mylist = [1,3,5,7] #대괄호를 이용하여 생성, 요소 별 구분은 쉼표
    • mylist = list(string, tuple, set 등) # list 함수를 이용한 변환
    • mylist = [] # 빈 리스트 생성
    • mylist = list() # 빈 리스트 생성
    • mylist = [value] # 1개 요소만 있는 리스트 생성
  • 리스트 크기

    • len(mylist) # 리스트 내 요소 개수 확인 (내장 함수 len)
  • 추출(리스트의 슬라이싱)

    • mylist = [7,3,8,9,1,4]
    • mylist[시작인덱스:끝인덱스:증가치] # 끝 인덱스의 값은 추출하지 않는다.
      • mylist[1:3] -> [3,8] mylist[:3] -> [7,3,8] mylist[4:] -> [1,4]
      • mylist[-2:] -> [1,4] mylist[-2::1] -> [1,4] mylist[-2::-1] -> [1,9,8,3,7]
  • 2차원 배열

    • mylist = [[1,3,5],[3,5,7],[5,7,9]]
    • mylist[0] -> [1,3,5]
    • mylist[1][1] -> 5
  • 수정

    • 인덱싱과 슬라이싱을 이용하여 요소를 수정
    a = [1,2,3]
    a[2] = 4 # a= [1,2,4]
    a[1:2] = ['c','d','e'] # [1,'c','d','e',4]
    a[1] = ['c','d','e'] # [1,['c','d','e'], 'd','e',4]
  • 삭제

    • pop() : 마지막 요소 반환 및 삭제
    • pop(idx) : idx번째 요소를 반환 및 삭제
    • del 연산자 삭제
    • remove(v) : 값(v)와 일치하는 첫 번째 요소 삭제
    a= [1,2,3,2,1]
    a.pop(1) # [1,3,2,1]
    del a[1] # [1,2,1]
    a.remove(1) # [2,1]
  • 자주 사용하는 list 메소드

    • count(x) : 값(x)와 일치하는 개수 반환
    • extend() : 리스트 확장
    a = [1,2,3]
    a.extend([4,5,1]) # [1,2,3,4,5,1]
    a.count(1) # 2
  • 추가적인 메소드

    l+= new_list      // list l과 new_list를 병합한다.
    b = l.copy()      // list l의 복사값을 b에 대입
    b = list(l)       // list l의 복사값을 b에 대입
    b = l[:]          // list l의 복사값을 b에 대입
    l.index('data')   // list 요소 중 'data'의 인덱스 반환
    'data' in l       // list'data' 요소가 있는지 True, False 반환
    ", ".join(l)      // ,를 기준으로 list를 문자열로 만든다.
    sorted(l)         // 정렬된 복사본을 반환
    l.sort()          // list 자체를 정렬한다.
    len(l)            // list 개수
    max(l)            // 요소 중 최대값
    min(l)            // 요소 중 최소값

3. 튜플(TUPLE)


  • 대부분이 리스트와 동일하지만 차이가 존재
  • 데이터 변경이 불가능한 Common Sequence Type
  • 튜플은 소괄호()로 표현
  • 리스트와 다르게 값의 추가, 수정, 삭제 불가 (조회만 가능)
  • 인덱싱과 슬라이싱은 가능
  • 값들의 수정이 불필요한 경우 리스트보다 튜플이 효율적
    (메모리 사용이 적음 ->sys.getsizeof() 메소드를 활용해 비교 가능)
  • tuple + tuple 형식으로 서로 다른 리스트를 붙임 가능
  • tupel은 append(), remove() 메소드가 없음
    • 처음 선언 시, 요소와 자료구조를 선언해야함 (e.g. t = (1, 2))
  • 튜플 생성
    • t = (1,3,5)
    • t = tuple([1,3,5]) # 변환 함수 사용
    • t = 1,2,3 # 소괄호를 이용하지 않고 생성
    • t = (1,) /t=1, # 1개 요소만 있는 Tuple 생성

😜 추가 지식

  • 시퀀스 탑입들 간의 변환
myStr = 'python'
list(myStr) # ['p', 'y', 't', 'h', 'o', 'n']
tuple(myStr) # ('p', 'y', 't', 'h', 'o', 'n')
  • 시퀀스 타입 객체가 가진 항목이 모두 문자열이라면 join 함수를 이용하여 문자열로 변환 가능
myList = ['hello', 'min', 'seok']
"".join(myList) # 'hellominseok'
  • join과 split을 이용하여 문자열과 시퀀스 객체 간에 데이터 변환 가능
  • 튜플 관련 메소드
    t = (seq)        // 튜플로 변환
    t.count           // 요소 개수
    t.index(2)        // 요소 위치 index
    len.(t)           // 튜플 길이
    max.(t)           // 요소 중 최대값
    min.(t)           // 요소 중 최소값

4. 셋(SET)


  • 집합 자료형
  • 요소의 중복이 불가능한 내장모듈 collection 자료형
  • 중괄호{}안에 쉼표(,)로 값들을 구분
  • 중복을 허용하지 않으며 순서가 없음
  • 중복제거, 교집합, 합집합, 차집합 등의 수학적인 계산이 가능
  • add(), update(), remove() 메소드를 활용하여 추가/삭제 가능
  • 세트 생성

    • 중괄호 및 쉼표 사용
      a = {'a','b','c','d','e'}
    • set 함수 사용
      b = set ('abcfff') # b = {'a', 'b', 'c', 'f'}
  • 추가

    • set.add(value)나 set.update(container) 방식으로 추가
    • add는 뒤에 추가 update는 앞에 추가
    b.add('g') # 값을 추가 {'a', 'b', 'c', 'f', 'g'} 
    b.update(['1','2','3']) # 여러 값 추가 {'1','2','3','a', 'b', 'c', 'f', 'g'}
  • 삭제

    • set.remove(value)나 set.pop() 방식으로 추가
    • remove는 value 값을 제거하지만 pop은 임의의 값을 제거
  • 집합 연산

    s1|s2        // s1 s2 합집합 , s1.union(b)라고도 함
    s1&s2        // s1 s2 교집합 , s1.intersection(b)라고도 함
    s1-s2        // s1 s2 차집합 , s1.difference(b)라고도 함
    s1^s2        // s1 s2 대칭 차집합 , (a-b) U (b-a) = (a U b) - (a ∩ b)의 개념으로 a.symmetric_difference(b)라고도 함
    (s1|s2) - a  // s1 s2 여집합 , (a U b) - a 개념

5. 사전(DICT)


  • 중복이 불가능한 collection 자료형
  • 딕셔너리는 Key와 Value의 쌍과 {}로 구성되어 있음
  • 딕셔너리는 리스트나 튜플처럼 순차적으로 요소 값을 구하지 않고 Key를 통해 Value를 얻음
  • 딕셔너리 항목은 시퀀스 타입과는 다르게 순서가 없음
  • Key값은 고유한 값으로 설정해야함 (중복이 안됨)
  • Key 값은 변경 불가능한 객체로 설정해야 함 (List를 Key 값으로 설정 불가)
  • 사전 생성

    • 중괄호, 쉼표로 요소를 구분하고 요소는 Key:Value pair로 전달됨
      a = {1:'b','c':'d'}
    • dict 함수 이용 dict(key=value, key=value) 이 경우 key는 문자열만 가능
      a = dict(m= 'b', 지역 = '서울') # b = {'a', 'b', 'c', 'f'}
    • Key는 변경 불가능한 객체(immutable) -> tuple, 정수(Literal) 가능
      b = {(1,2) : 'tuple'}
      b[(1,2)] # 'tuple'
    • 단, dict 함수를 이용하여 생성할 경우 key는 문자열만 가능
  • 사전 조회

    • 인덱싱과 동일하게 대괄호에 key를 넣어 조회 (a['지역'] -> '서울')
    • deict.get(key)로도 가능
    • 만약 존재하지 않는 key값을 다음과 같은 방법으로 조회 했을 경우
      • a['없나'] : 오류가 뜸 keyError : '없나'
      • print(a.get('없나') : None
  • 사전 수정/추가

    • 딕셔너리에는 수정과 추가 방법이 같음
    • 대괄호 조회를 이용한 수정/추가
      • a['key'] = 'value' 꼴인데 있는 key면 수정 없는 key면 추가
    • dict.update(dict)은 여러 개의 값들을 동시에 수정하고 추가할 수 있음
  • 사전 삭제

    • del을 이용해 삭제 # del dict[Key]
    • dict.pop(key) # print(a.pop('key'))를 하면 'value' 가 출력되며 dict의 해당 값이 빠짐
    • dict.clear() : 빈 딕셔너리로 만듬
  • 딕셔너리 관련 함수 및 키워드

    d = dict()              // 딕셔너리 선언
    d.keys()                // 딕셔너리의 키 목록
    d.values()              // 딕셔너리의 값 목록
    d.items()               // 딕셔너리의 key-value 튜플 목록
    d.copy()                // 딕셔너리 복사
    d.fromkeys()            // seq, value 셋으로 딕셔너리 생성
    d.get(key, default=None) // 해당 키의 저장된 값 확인
    d.setdefault(key, default-None) // 해당 키의 저장된 값 확인(만약 값이 없으면 None)
    d.update(d2)            // 딕셔너리에 'd2'라는 딕셔러니를 추가
    len(d)                  // 딕셔너리 길이
    str(d)                  // 딕셔너리를 문자열로 변환
    'A' in d                // 사전 내 key 존재 여부 확인(in or not in) True,False와 같은 출력이 나옴

참고


해당 사이트의 내용과 참고 서적을 참고로 작성했습니다. 추후에 더 알게 되는 내용들을 추가하겠습니다.

[Python] List(리스트) vs Tuple(튜플) vs Set(셋) vs Dictionary(딕셔너리)

profile
Better & Better 꾸준히 성장하는 개발자

0개의 댓글