13-1. 들어가며


  • 학습 목표
    • 리스트와 딕셔너리를 다양한 방법으로 다루기
    • 리스트와 딕셔너리의 함수를 보고 -> 출력 결과를 예상할 수 있다!
    • 컴프리헨션에 대한 이해

13-2. 리스트를 다루는 여러 가지 방법


다차원 리스트 : 가로는 행(row), 세로는 열(column)

  • 1차원 리스트

    • 리스트 선언 : 1차원 리스트는 1줄!
  • 2차원 리스트

    • 실제 형태

    • 2차원 리스트의 길이(length) = 행의 길이

      # 2차원 리스트의 len()함수
      len(2차원_리스트) → 행의 길이
    • 2차원 리스트의 인덱싱

      # 2차원 리스트의 인덱싱
      list[][]
      
      # 예시 : 2행 2열
      list_tw[1][1]
    • 인덱싱을 하나만 한다면? -> 행이 모두 출력!

  • 3차원 리스트

    # 3차원 리스트
    3차원_리스트[depth][][]
    # 4행, 3열, depth 2인 3차원 리스트
    list_th = [[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]],\
               [['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h', 'i'], ['j', 'k', 'l']]]
    list_th
    • 출력 이해하기

      [[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]],
       [['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h', 'i'], ['j', 'k', 'l']]]

  • 3차원 리스트의 길이 == depth의 길이(인덱싱 첫번째 순서가 depth)

    # Q. ['d', 'e', 'f']를 선택하려면 인덱싱을 어떻게 해야 할까요?
    list_th[1][1][:]

리스트 함수

  • min(), max() : 리스트 최솟값, 최댓값

    • 리스트 안에 숫자가 아닌 자료형이 있을 때
      • '<' not supported between instances of 'int' and 'str' 오류 발생
      • int형과 str형은 서로의 크기 비교 불가
    • 문자열만 있으면 가능!(아스키 코드로 비교)
      - 아스키 코드 ➔ 문자열 : chr()
      - 문자열 ➔ 아스키 코드 : ord()

  • sum() : 모두 더하는 함수

    • 반복문보다 효율적

  • enumerate() : 리스트 원소에 순서값 부여, for문과 함께 쓰임.

    • 각 요소 인덱스, 데이터 값 리턴
    for i in enumerate(kims_age):
        print(i)
  • zip() : 여러 개의 순회 가능한(iterable) 객체를 인자로 받아 각 객체의 원소를 순차 접근할 수 있는 반복자(iterator) 반환

    # for문에 zip을 넣고 출력해보기
    napoli_num = [3, 77, 9, 99]
    napoli_player = ['minjae', '크바라츠헬리아', 'Osimhen', 'Anguissa'] 
    
    for i in zip(napoli_num, napoli_player):
        print(i)
    (3, 'minjae')
    (77, '크바라츠헬리아')
    (9, 'Osimhen')
    (99, 'Anguissa')

    이터레이터(iterator)

    • 파이썬에서 반복적으로 요소를 하나씩 꺼내 처리할 수 있는 객체
  • zip(*) : 묶은 데이터 해제

new_num, new_player = zip(*check_zip)
print(new_num)
print(new_player)


13-3. 딕셔너리를 다루는 여러 가지 방법


딕셔너리 함수

  • key-value 추가하기 : setdefault(), update()

    • setdefault()
      • 사용 형태
      딕셔너리.setdefault(key, value)
      • 조건
        • 기존 key O : 해당 key의 value 반환
        • key ❌ : 딕셔너리에 key:value를 저장 후 value 반환

    • update()
      • 사용 형태 : 특정 key-value 조합 삽입
      딕셔너리.update(iterable) 

    setdefault() vs update()

    • setdefault()
      • 함수에 key와 value를 넣었는데,
      • 이미 key가 딕셔너리에 있다면 -> 새로 value 값을 넣어도 무시된다!
    • update() 함수
      • 기존 value 값과 상관없이 새로 입력된 value 값으로 업데이트된다!

  • key-value 삭제하기 : pop(), popitem()
    • pop()

      • 마지막 요소 출력 후 마지막 요소 삭제
      • 사용 형태 : 리스트or딕셔너리.pop()
      • 딕셔너리의 경우, key를 넣어주거나, popitem()을 사용하면 마지막 value 값을 꺼내 삭제해준다!
      # key를 넣어주는 경우
      dict_uni.pop('g')
      
      # popitem() 사용
      dict_uni.popitem()

  • 딕셔너리 생성 : fromkeys()

    • 리스트나 튜플 삽입 -> 자동으로 딕셔너리를 만들 수 있는 함수
    • 사용 형태 : key 값을 넣는 함수이므로 value는 None으로 자동 할당됨.
    dict.fromkeys(리스트 또는 튜플)
    
    # value를 같이 넣고 싶다면?
    dict.fromkeys(key, value)

  • in, not in
    • 해당 요소가 리스트, 딕셔너리, 튜플, 문자열에 포함되는지 확인
    • in은 포함, not in은 불포함
    • 조건문과 자주 쓰임
    • 리턴값은 bool(True, False로 리턴)
    • 사용 형태 : 요소 in 리스트, 요소 not in 리스트
  • 딕셔너리에서는 in으로 key만 확인 가능
    • value 값 확인 방법 : values() 함수와 함께 쓰기
    100 in dict_uni.values()


13-4. 컴프리헨션


리스트 컴프리헨션

  • 반복문 vs 컴프리헨션

    • 반복문 [] == 컴프리헨션 []

    • for문 == 컴프리헨션 for문

    • 반복문 변수 i == 컴프리헨션 변수 x


  • 중복 표현과 컴프리헨션

    • 컴프리헨션에 for문과 if문 중복 가능
    # for문
    [[x, y] for x in sweetie for y in savory]
    
    # if문
    [x for x in range(1, 30) if x % 2 == 0 if x % 3 == 0]

셋 컴프리헨션 & 딕셔너리 컴프리헨션

  • 셋 컴프리헨션
    • 리스트를 만들 때 쓰는 대괄호 [ ] 대신에 중괄호 { } 사용
    {x for x in range(0, 11, 2)}
  • 딕셔너리 컴프리헨션
    • 중괄호 + key:value의 형태로 내용 삽입 시 사용 가능
    • zip() 함수로 key, value 지정
    napoli_num = [3, 77, 9, 99]
    napoli_player = ['minjae', '크바라츠헬리아', 'Osimhen', 'Anguissa'] 
    {k:v for k, v in zip(napoli_num, napoli_player)}
    • if문도 사용 가능
    {k:v for k, v in zip(napoli_num, napoli_player) if k < 50}
profile
언젠가 내 코드로 세상에 기여할 수 있도록, BE&Data Science 개발 기록 노트☘️

0개의 댓글