[Python] 기초 - 데이터 구조 및 활용

ITmakesmeSoft·2022년 9월 3일
0

PYTHON [BASIC]

목록 보기
2/13
post-thumbnail

데이터 구조 및 활용

데이터 구조 활용

  • 데이터 구조를 활용하기 위해서는 메서드(method)를 활용
    • 메서드는 클래스 내부에 정의한 함수, 사실상 함수와 동일

    • 쉽게 설명하자면, 객체의 기능

      list.append('a')  # <= .append()도 메서드
      String.split('')  # <= .split()도 메서드
      String.replace(old, new[, count]) # 이것도 메서드 [optional] 괄호 안의 내용은 옵션

순서가 있는 데이터 구조

  • 문자열(String Type)

    • 문자들의 나열(sequence of characters)
      • 모든 문자는 str타입(immutable ; 불변자료형)

        word = 'hello'
        print(id(word)) #2685397778032
        word = 'world'
        print(id(word)) #2685393262896
      • 겉보기에는 변경 가능한 것처럼 보이지만, 파이썬은 변수에 메모리 주소만 저장하는 방식으로 구현되어 있음.

      • 변수에 새로운 문자열을 넣으면, 문자열이 변경되는 것이 아닌 새로운 메모리 주소가 할당되는 것.

  • 문자열 조회/ 탐색 및 검증 메서드

    문법설명
    s.find(x)x의 첫 번째 위치를 반환. 없으면 -1을 반환
    s.index(x)x의 첫 번째 위치를 반환. 없으면 오류 발생
    s.startswith(x)문자열이 x로 시작하면 True, 아니면 False 반환
    s.endswith(x)문자열이 x로 끝나면 True, 아니면 False 반환
    s.isalpha()알파벳 문자 여부
    * 단순 알파벳이 아닌 유니코드 상 Letter(한국어 포함)
    s.isspace()문자열의 공백 여부 판단
    s.isupper()대문자 여부 판단
    s.islower()소문자 여부 판단
    s.istitle()타이틀 형식 여부 판단
    print('apple'.find('p')) # 1
    
    print('apple'.find('k')) # -1
    print('apple'.index('k')) # ValueError: substring not found
    
    print('abc'.isalpha()) # True
    print('가나다'.isalpha()) # True
    print('A'.isupper()) # True
    print('a'.islower()) # True
    print('Title'.istitle()) #True
    
  • 문자열 관련 검증 메서드

    • isdecimal(), isdigit(), isnumeric()
    • isdecimal() < isdigit() < isnumeric() 순으로 숫자 판별이 관대해짐
      문법설명
      .isdecimal()문자열이 0~9까지의 수로 이루어져 있는가?
      .isdigit()문자열이 숫자로 이루어져 있는가?
      .isnumeric()문자열을 수로 볼 수 있는가?
      isdecimal()isdigit()isnumeric()Example
      TrueTrueTrue"038", "੦੩੮", "038"
      FalseTrueTrue"⁰³⁸", "🄀⒊⒏", "⓪③⑧"
      FalseFalseTrue"↉⅛⅘", "ⅠⅢⅧ", "⑩⑬㊿", "壹貳參"
      FalseFalseFalse"abc", "38.0", "-38"
  • 문자열 변경 메서드

    문법설명
    s.replace(old, new [, count])바꿀 대상 글자를 새로운 글자로 바꿔서 반환
    s.strip([chars])공백이나 특정 문자를 제거(lstrip(), rstrip()으로도 구분)
    s.split(sep=None, maxsplit=-1)공백이나 특정 문자를 기준으로 분리
    ‘separator’.join([iterable])구분자로 iterable을 합침
    s.capitalize()가장 첫 번째 글자를 대문자로 변경
    s.title()문자열 내 띄어쓰기를 기준으로 각 단어의 첫 글자는 대문자로, 나머지는 소문자로 변환
    s.upper()모두 대문자로 변경
    s.lower()모두 소문자로 변경
    s.swapcase()대↔소문자 서로 변경
    print('a,b,c'.split(',')) # ['a', 'b', 'c']
    print('서울시 강남구 00동'.split()[0]) # 서울시
    print('010-1234-5678'.split('-')) # ['010', '1234', '5678']
    
    print('!'.join('coding')) # c!o!d!i!n!g
    print(' '.join(['3', '5'])) # 3 5
    print(''.join(['3', '4', '5'])) # 345  공백제거도 가능
    
    msg = 'hello World! coiding is everywhere'
    print(msg.capitalize()) # Hello world! coiding is everywhere
    print(msg.title()) # Hello World! Coiding Is Everywhere
    print(msg.upper()) # HELLO WORLD! COIDING IS EVERYWHERE
    print(msg.lower()) # hello world! coiding is everywhere
    print(msg.swapcase()) # HELLO wORLD! COIDING IS EVERYWHERE
  • 리스트(List)
    • 리스트는 대괄호([]) 혹은 list()를 통해 생성
      • 파이썬에서는 어떠한 자료형도 저장할 수 있으며, 리스트안에 리스트를 넣을 수도 있음.
      • 생성된 이후 내용 변경이 가능 (mutable; 가변 자료형)
      • 순서가 있는 시퀀스로 인덱스를 통해 접근 가능
    • 리스트 메서드
      문법설명
      L.append(x)리스트 마지막에 항목 x를 추가
      L.insert(i, x)리스트 인덱스 i에 항목 x를 삽입
      L.remove(x)리스트 가장 왼쪽에 있는 항목(첫 번째) x를 제거
      - 없는 경우, ValueError 발생
      L.pop()리스트 가장 오른쪽에 있는 항목(마지막)을 반환 후 제거
      - 없는 경우, IndexError 발생
      L.pop(i)리스트의 인덱스 i에 있는 항목을 반환 후 제거
      - 없는 경우, IndexError 발생
      L.clear()리스트의 모든 항목을 삭제
      L.extend(m)순회형 m의 모든 항목들의 리스트 끝에 추가(+=와 같은 기능)
      L.index(x, start, end)리스트에 있는 항목 중 가장 왼쪽에 있는 항목 x의 인덱스를 반환
      - 없는 경우 ValueError 발생
      L.reverse()리스트를 거꾸로 정렬
      L.sort()리스트를 정렬(매개변수 이용가능)
      L.count(x)리스트에서 항목 x가 몇 개 존재하는지 갯수를 반환
      cafe = ['starbuks', 'tomntoms']
      cafe.append('banapresso')
      print(cafe) # ['starbuks', 'tomntoms', 'banapresso']
      cafe.insert(1, 'twosomeplace')
      print(cafe) #['starbuks', 'twosomeplace', 'tomntoms', 'banapresso']
      cafe.extend(['coffee'])
      print(cafe) #['starbuks', 'twosomeplace', 'tomntoms', 'banapresso', 'coffee']
      cafe.extend('cup')
      print(cafe) 
      #['starbuks', 'twosomeplace', 'tomntoms', 'banapresso', 'coffee', 'c', 'u', 'p']
      
      numbers=[1,2,3,'hi']
      print(numbers) # [1, 2, 3, 'hi']
      numbers.remove('hi')
      print(numbers) # [1, 2, 3]
      numbers.remove('hi') # ValueError: list.remove(x): x not in list
      
      numbers=[1,2,3,'hi']
      word=numbers.pop()
      print(word) # hi
      print(numbers) # [1, 2, 3]
      numbers.clear()
      print(numbers) # []
      
      numbers=[1,2,3,4]
      print(numbers.index(5)) # ValueError: 5 is not in list
      
      numbers=[1,2,3,3,3,4,3,6]
      print(numbers.count(3)) # 4
      print(numbers.count(100)) # 0
      • sorted(*iterable*) vs iterable.sort()
        • .sort() 메소드는 기존의 리스트를 정렬된 상태로 변경

        • sorted() 함수는 이터러블 객체로부터 새로운 정렬된 객체를 생성

          numbers = [2,3,5,7]
          result = numbers.sort()
          print(numbers, result) # [2, 3, 5, 7] None
          
          numbers = [2,3,5,7]
          # result = numbers.sorted() ------(x)
          result = sorted(numbers) # [2, 3, 5, 7] [2, 3, 5, 7]
  • 튜플(Tuple)
    • 튜플은 여러 개의 값을 순서가 있는 구조로 저장하고 싶을 때 사용
      • 리스트와의 차이점은 생성 후, 담고 있는 값을 변경할 수 없음 (immutable; 불변자료형)

순서가 없는 데이터 구조

  • 세트(set)
    • 중복되는 요소가 없는, 순서에 상관없는 데이터들의 묶음

    • 인덱스 접근 불가능

    • 수학에서 집합을 표현한 자료형

    • 집합 연산이 가능(여집합 연산자는 존재하지 않음)

    • 담고있는 요소를 삽입 변경, 삭제 가능 → 가변 자료형(mutable)

      문법설명
      s.copy()세트의 얕은 복사본을 반환
      s.add(x)항목 x가 세트 s에 없다면 추가
      s.pop()세트 s에서 랜덤하게 항목을 반환하고, 해당 항목을 제거 (set이 비어있을 경우 KeyError 발생)
      s.remove(x)항목 x를 세트 s에서 삭제 (항목이 존재하지 않을 경우, KeyError 발생)
      s.discard(x)항목 x가 세트 s에 있는 경우, 항목 x를 세트 s에서 삭제 (없어도 오류 발생하지 않음)
      s.update(t)세트 t에 있는 모든 항목 중 세트 s에 없는 항목을 추가
      s.clear()모든 항목을 제거
      s.isdisjoint(t)세트 s가 세트 t의 서로 같은 항목을 하나도 갖고 있지 않은 경우, True 반환(서로소)
      s.issubset(t)세트 s가 세트 t의 하위 세트인 경우, True 반환
      s.issuperset(t)세트 s가 세트 t의 상위 세트인 경우, True 반환
      a = {'사과', '딸기'}
      a.add('바나나')
      print(a) # {'사과', '딸기', '바나나'}
      
      b = {'사과', '딸기', '포도'}
      a.update(b)
      print(a) # {'딸기', '바나나', '사과', '포도'}
      
      a.remove('딸기')
      print(a) # {'바나나', '사과', '포도'}
      # a.remove('딸기') # KeyError: '딸기'
      a.discard('딸기') # discard는 항목이 존재하는 경우에만 삭제. 
                        # 없어도 오류 발생하지 않음.
      print(a) # {'바나나', '사과', '포도'} 
      a.clear()
      print(a) # set()
      
      a={'사과', '바나나', '수박'}
      b={'포도', '망고'}
      c={'사과', '포도', '망고', '수박', '바나나'}
      print(a.isdisjoint(b))  # True a와 b는 겹치는 부분이 없음
      print(a.isdisjoint(c))  # False a와 c는 겹치는 부분이 있음
      print(b.issubset(c)) # True
      print(a.issuperset(c)) # False a가 c의 상위셋인가?
  • 딕셔너리
    • 키-값 쌍으로 이뤄진 자료형(3.7부터는 ordered, 이하 버전은 unordered)

      문법설명
      d.clear()모든 항목을 제거
      d.copy()딕셔너리 d의 얕은 복사본을 반환
      d.keys()딕셔너리 d의 모든 키를 담은 뷰를 반환
      d.values()딕셔너리 d의 모든 값을 담은 뷰를 반환
      d.items()딕셔너리 d의 모든 키-값의 쌍을 담은 뷰를 반환
      d.get(k)키 k의 값을 반환하는데, 키 k가 딕셔너리 d에 없을 경우 None을 반환
      d.get(k, v)키 k의 값을 반환 (키 k가 딕셔너리 d에 없을 경우 v를 반환)
      d.pop(k)키 k의 값을 반환하고 키 k인 항목을 딕셔너리d에서 삭제 (키 k가 딕셔너리 d에 없을 경우 KeyError 발생)
      d.pop(k, v)키 k의 갑을 반환하고 키 k인 항목을 딕셔너리 d에서 삭제하는데, 키 k가 딕셔너리에 없을 경우 v를 반환
      d.update([other])딕셔너리 d의 값을 매핑하여 업데이트
profile
💎 Daniel LEE | SSAFY 8th

0개의 댓글