데이터 구조별 메소드

순서가 있는 데이터 구조


문자열

  • 문자들의 나열 (str타입)
  • 작은 따옴표 or 큰 타옴표를 활용하여 표기

메소드

  • s.find(x) : x의 첫 번째 위치를 반환, 없으면 -1을 반환

    • ' apple '.find('p') >>> 1
  • s.index(x) : x의 첫번째 위치를 반환 ,없으면 오류 발생

    • ' apple '.find('p') >>> 1 // 없을 시, ValueError
  • s.isalpha() : 알파벳 문자 여부( 한국어 포함 )

    • ' abc ' is.alpha() >>> True
  • s.isupper() : 대문자

    • 'Ab' .isupper() >>> False
  • s.islower() : 소문자 여부

- s.istitle() : 타이틀 형식

'Title Title!.'.istitle() >>> True

공백을 기준으로 앞 뒤 단어들이 대문자 인지?

is가 앞에 있으면 boolean => True 혹은 False 값이 리턴

문자열 변경 메소드

  • s. replace( old , new[,count] )

    ​ 대상 , 새로운 값

    • 바꿀 대상 글자를 새로운 글자로 바꿔서 변환
      • 'coone'.replace('o','a') >>> caane
  • s. strip([chars])

    • 특정 문자 제거
    • 양쪽 제거(strip), 왼쪽제거(lstrip), 오른쪽제거(rstrip)
      • ' 와우!\n'.stript() >>> '와우!'
      • '안녕하세요???'.rstrip(?) >>> '안녕하세요'
  • s.split( sep= None , Maxsplit = -1)

    • 공백이나 문자를 기준으로 분리
    • Maxsplit 인 경우 제한이 없음
      • 'a b c'.split() >>> [ 'a' , 'b' , 'c' ]
  • s.join([iterable])

    • 반복가능한 컨테이너 요소들을 separator 로 합쳐 문자열 반환
    • iterable에 문자열이 아닌 값이 있으면 TypeError 발생
      • ' ! '.join('ssafy') >>> 's!s!a!f!y'
      • ' '.join(['3','5]) >>> ' 3 5 '
    • iterable 이 int 일 경우
      • ' '.join(map(str,numbers))

    리스트(List)

  • 숫자를 가지는 0개 이상의 객체를 참조하는 자료형

    • 리스트 메소드 -> 리스트 요소를 변경 시키는것 ( because : mutable )

  • L. append(x) => 리스트에 값을 추가

  • L. insert( i, x ) => 인덱스 i 에 항목 x 를 삽입

    • 정해진 i 의 위치에 값을 추가
  • L.remove(x) => 가장 왼쪽에 있는 x를 제거

    • x 값 을 제거 (인덱스가 아님)

    • 없는 경우 Value Error

  • L.pop( ) => 가장 마지막 항목을 반환 후 제거

  • L.pop(i) => 인덱스 i 에 있는 항목을 반환 후 제거

    • i 의 위치한 값 (인덱스)을 삭제하고 , 그 항목을 반환
  • L.extend(iterable) => 리스트에 iterable의 항목을 추가

    • cafe = ['starbucks', 'tomntoms','hollys']

      cafe. extend['coffee' => 리스트]

      ['starbucks','tomntoms','hollys','coffee']

  • L.clear() => 리스트 모든 항목을 삭제

  • L.index( x, start, end) => x의 값을 찾아 Index 값을 반환

  • L.reverse => 원본 자체순서를 뒤집는다.

  • L.sort() => 원본 리스트를 정렬함. None 반환

    • a.sort() 한뒤 print(a) 해야 정렬된 것을 확인 가능

    • sorted 함수와 비교할 것

      • sorted 함수는 인자를 넘겨준다. 원본 리스트는 변경이 안됨
  • L.count(x) => 원하는 값(x)의 개수를 반환


#### 튜플(Tuple)

  • 0 개 이상의 객체를 참조하는 자료형 (immutable)

메소드 => 값에 영향을 미치지 않는 메소드 만을 지원

  • append() 사용 불가

순서가 없는 데이터 구조

셋(Set)

  • 순서 없이 0 개 이상의 해시 가능한 객체를 참조
  • 담고 있는 객체를 삽입 변경, 삭제 가능 - > mutable

  • s.add(x) => 셋에 값을 추가
  • s.update(*others) => 여러 값을 추가
  • s.pop() => 임의의 원소를 제거해 반환 ( 순서가 없기 때문에 임의의 원소를 제거)
  • s.remove(s) => 셋에서 삭제, 없으면 KeyError
  • s.discard(elem) => 셋에서 삭제, 없어도 에러 발생하지 않음

딕셔너리(Dictionary)

  • 순서 없이 키 - 값 (Key-value) 쌍으로 이뤄진 객체를 참조

  • d.keys()

  • d.values()

  • d.item

  • d.get(k,[,default]) => value 가져올 수 있음

  • d.pop(k[,default]) =>

    • key가 딕셔너리에 있으면 제거하고 해당 값 반환

    • 그렇지 않으면 default를 반환

  • d.pop(k,v)

  • d.update([other]) => 값을 제공하고 key,value 로 덮어쓴다 (추가 및 삭제)


얕은 복사와 깊은 복사

복사 방법

할당(assingment)

  • 대입 연산자 (=)
    • 리스트 복사 확인하기
      • a = b 라고 할당 했을 때, b값을 변경하면 a값도 같이 변경 된다.
      • original_list = copylist[:] 또는 list(copylist) 하면 다른 값이 할당

얕은 복사 주의 사항

  • 복사하는 리스트의 원소가 주소를 참조하는 경우 ( 2차원 리스트 인 경우 )

  • original_list = [1, 2, [0,1]]
    copy_list = [originam_list[:]]
    
    copy_list[2][0] = 'h'
    print(copy_list , original_list)
    
    >>>
    [1,2,['h',1]] , [1,2,['h',1]]
    • 2차원으로 구조가 되어 있을 경우 , 얕은 복사가 아닌 깊은 복사를 해야한다

깊은 복사

import copy
a = [1,2,['a','b']]
b = copy.deepcopy(a)
b[2][0] = 0
print (a,b)

>>>
[1,2,['a','b']] , [1,2,['0','b']]

디버깅

확인 해야 할것.

braches

내가 작성한 조건문이 모든 조건을 커버하는가 ?

for loop

반복문이 원하는 횟수 만큼 도는가 ? 반복문의 값

while loop

종료 조건이 잘 설정 했는가

function

함수의 호출이 제대로 되었는가? parameter 를 제대로 넣어 주었는가 ?

각자 type 확인을 잘 해야함

디버깅

  • print 함수 활용
    • 특정 함수의 결과, 반복/조건 결과 등 나눠서 생각 , 코드를 bisection 으로 나눠서 생각
  • 개발 환경 등에서 제공하는 기능 활용
    • breakpoint , 변수 조회 등
  • Python tutor 활용 ( 단순 코드 인 경우 )
  • 뇌 컴파일, 뇌 디버깅

  • 에러가 나는 경우
    • 해당 위치를 찾아 메세지 해결
  • 로직에러 발생
    • 정상적인 코드 이후 작성된 코드를 생각해봄
    • 전체 코드를 살펴봄
    • 휴식을 가져봄
    • 누군가에게 설명해봄
    • 러버덕 디버깅

에러와 예외

문법 에러 (Syntax Error)

  • 문법적 에러가 발생, 프로그램이 실행 되지 않음
  • 줄에서 에러가 감지된 가장 앞의 위치를 가리키는 캐럿 기호 (^) 를 표시

Invalid syntax

  • 유효하지 않은 문법

assign to literal

EOL(End of Line)

EOF(End of File)

예외 (Expection)

  • 실행 도중 예상치 못한 상황을 맞이하면, 프로그램이 멈춤
    • 문장이나 표현식이 맞더라도 발생
  • 예외는 여러타입

TypeError - 타입 불일치

  • Type이 다른 것 들 끼리 연산을 하려는 경우

TypeError - argument 누락

  • ex) divmod()
    • divmod(x,y)

ValueError

  • 타입은 올바르나 값이 적절하지 않거나 없는 경우

IndexError

  • 인덱스가 존재하지 않거나 범위를 벗어난 경우

KeyError

  • 딕셔너리에 해당 Key가 존재하지 않는 경우

예외처리

  • Try 문 (statment) / except 절 (claues)를 이용하여 예외 처리
try:
	num = input('숫자 입력 :')
    print(int(num))
except ValueError:
    print('숫자가 입력 되지 않앗습니다.')

에러 메시지 처리 (as)

  • as 키워드를 활용하여 원본 에러 메시지를 사용할 수있음

    • 예외를 다른 이름에 대입
    try:
    	num = input('숫자 입력 :')
        print(int(num))
    except ValueError as e:
        print(f'{e},숫자가 입력 되지 않았습니다.')
  • try

  • except

  • else

  • finally

파일을 열고 읽는 코드를 작성하는 경우 사용

if - else 를 사용하지않고 try except 를 사용하는 이유

에러를 처리 할 수 있기 때문에

profile
개발 일기

0개의 댓글

Powered by GraphCDN, the GraphQL CDN