Python_기초문법6

Jingi·2024년 1월 22일

Python

목록 보기
6/32
post-thumbnail

1. 데이터 구조 _ Data Structure

  • 여러 데이터를 효과적으로 사용, 관리하기 위한 구조 (str, list, dict 등)

1. 데이터 구조 활용

  • 문자열, 리스트, 딕셔너리 등 각 데이터 구조의 메서드를 호출하여 다양한 기능을 활용하기

2. 메서드 _ Method

  • 객체에 속한 함수
    -> 객체의 상태를 조작하거나 동작을 수행

1) 메서드 특징

  • 메서드는 클래스(class) 내부에 정의되는 함수

  • 클래스는 파이썬에서 '타입을 표현하는 방법' 이며 이미 은연중에 사용해 왔음

  • 예를 들어 help 함수를 통해 str을 호출해보면 class 였다는 것을 확인 가능

  • 어딘가(클래스)에 속해 있는 함수이며 각 데이터 타입별로 다양한 기능을 가진 메서드가 존재

    # 데이터 타입 객체. 메서드()
    'hello'.capitalize()

2. 시퀀스 데이터 구조


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


[출처]https://wikidocs.net/95985

1) 문자열 조회

  • .find(x)
    • x의 첫 번째 위치를 반환
    • 있으면 1을 없으면, -1을 반환
      print('banana'.find('a')) # 1
      print('banana'.find('z')) # -1
  • .index(x)
    • x의 첫 번째 위치를 반환
    • 없으면 오류 발생
  • .isupper(x) / .islower(x)
    • 문자열이 모두 대문자/소문자로 이루어져있는지 확인
  • .isalpha(x)
    • 문자열이 알파벳으로만 이루어져 있는지 확인
      string1 = 'Hello'
      string2 = '123
      print(string1.isalpha()) # True
      print(string2.isalpha()) # False

2) 문자열 조작 메서드

  • .replace(old, new[,count])
    • 바꿀 대상 글자를 새로운 글자로 변경
      text = 'Hello, world'
      new_text = text.replace('world', 'Python')
      print(new_text) # Hello, Python!
  • .strip([chars])
    • 문자열의 시작과 끝에 있는 공백 혹은 지정한 문자를 제거
      text = '  Hello, world!   '
      new_text = text.strip()
      print(new_text) # Hello, world!
  • .split(sep=None, maxsplit=-1)
    • 지정한 문자를 구분자로 문자열을 분리하여 문자열의 리스트로 반환
      text = 'Hello, world!'
      words = text.split(',')
      print(words) # ['Hello', ' world!']
  • .join([iterable])
    • iterable 요소들을 원래의 문자열을 구분자로 이용하여 하나의 문자열로 연결
      words = ['Hello', 'world']
      text = '-'.join(words)
      print(text) # 'Hello-world'

2. 리스트 값 추가 및 삭제 메서드

메서드설명
L.appned(x)리스트 마지막에 항목 x를 추가
L.extend(m)Iterable m의 모든 항목들을 리스트 끝에 추가 (+=과 같은 기능)
L.insert(i, x)리스트 인덱스 i에 항목 x를 삽입
L.remove(x)리스트 가장 왼쪽에 있는 항목(첫 번째) x를 제거
항목이 존재하지 않을 경우 : ValueError
L.pop()리스트 가장 오른쪽에 있는 항목(마지막)을 반환 후 제거
L.pop(i)리스트 인덱스 i에 있는 항목을 반환 후 제거
L.clear()리스트의 모든 항목 삭제
  • .append(x)
    • 리스트 마지막에 항목 (x)를 추가
  • .extend(iterable)
    • 리스트에 다른 반복 가능한 객체의 모든 항목을 추가
      my_list = [1, 2, 3]
      my_list.extend([4, 5, 6])
      print(my_list) # [1, 2, 3, 4, 5, 6]
  • .insert(i, x)
    • 리스트의 지정한 인덱스 위치에 항목 x를 삽입
      my_list = [1, 2, 3]
      my_list.insert(1, 5)
      print(my_list) # [1, 5, 2, 3]
  • .remove(x)
    • 리스트에서 첫 번쨰로 일치하는 항목을 제거
      my_list = [1, 2, 3]
      my_list.remove(2)
      print(my_list)
  • .pop(i)
    • 리스트에서 지정한 인덱스의 항목을 제거하고 반환
      my_list = [1, 2, 3, 4, 5]
      item1 = my_list.pop() # 가장 마지막 삭제
      itme2 = my_list.pop(0) # 1 삭제
  • .clear()
    • 리스트의 모든 항목을 삭제
      my_list = [1, 2, 3]
      my_list.clear()
      print(my_list)

3. 리스트 탐색 및 정렬 메서드

문법설명
L.index(x, start, end)리스트에 있는 항목 중 가장 왼쪽에 있는 항목 x의 인덱스를 반환
L.reverse()리스트의 순서를 역순으로 변경 (정렬 X)
L.sort()리스트를 정렬 (매개변수 이용가능)
L.count(x)리스트에서 항목 x의 개수를 반환
  • .index(x)
    • 리스트에서 첫 번쨰로 일치하는 항목의 인덱스를 반환
  • .count(x)
    • 리스테엇 항목 x가 등장하는 횟수를 반환
  • .sort()
    • 원본 리스트를 오름차순으로 정렬
  • .reverse()
    • 리스트의 순서를 역순으로 변경(정렬 X)

3. 복사


1. 데이터 타입과 복사

  • 파이썬에서는 데이터에 분류에 따라 복사가 달라짐

  • "변경 가능한 데이터 타입"과 "변경 불가능한 데이터 타입"을 다르게 다룸

  • 변경 가능

    a = [1, 2, 3, 4]
    b = a
    b[0] = 100
    print(a) # [100, 2, 3, 4]
    print(b) # [100, 2, 3, 4]
  • 변경 불가

    a = 20
    b = a
    b = 10
    print(a) # 20
    print(b) # 10

2. 복사유형

1) 할당 (Assignment)

  • 주소를 할당한 것

    original_list = [1, 2, 3]
    copy_list = original_list
    print(original_list, copy_list) # [1, 2, 3] [1, 2, 3]
    copy_list[0] = 'hi'
    print(original_list, copy_list) # ['hi', 2, 3] ['hi', 2, 3]

2) 얕은 복사 (Shallow copy)

  • 슬라이싱을 통한 복사

    a = [1, 2, 3]
    b = a[:]
    print(a, b) # [1, 2, 3] [1, 2, 3]
    b[0] = 100
    print(a, b) # [1, 2, 3] [100, 2, 3]
  • 한계

    • 2차원 리스트와 같이 변경 가능한 객체 안에 변경 가능한 객체가 있는 경우

    • a와 b의 주소는 다르지만 내부 객체의 주소는 같기 떄문에 함께 변화

      a = [1, 2, [1, 2]]
      b = a[:]
      print(a, b) # [1, 2, [1, 2]] [1, 2, [1, 2]]
      
      b[2][0] = 100
      print(a, b) [1, 2, [100, 2]] [1, 2, [100, 2]]

3) 깊은 복사 (Deep copy)

  • .copy() 이용

  • 내부에 중첩된 모든 객체까지 새로운 객체 주소를 참조하도록 함

    import copy
    
    original_list = [1, 2, [1, 2]]
    deep_copied_list = copy.deepcopy(original_list)
    deep_copied_list[2][0] = 100
    
    print(original_list) # [1, 2, [1, 2]]
    print(deep_copied_list) # [1, 2, [100, 2]]

4. 참고

메서드설명
isdecimal()문자열이 모두 숫자 문자(0~9)로만 이루어져 있어야 True
isdigit()isdecimal()과 비슷하지만, 유니코드 숫자도 인식
isnumeric()isdigit()과 유사하지만, 몇 가지 추가적인 유니코드 문자들을 인식( 분수, 지수, 루트 기호도 숫자로 인식)
profile
데이터 분석에서 백엔드까지...

0개의 댓글