5 minute read

Python 데이터 구조

함수 & 메서드

함수

  • return 값이 유의미
len('happy!')
print('happy')
sum(4+73)

함수(arguments)

메서드

  • return 값은 항상 None
input().split()
문자열.split()

[1,2,3].append(4)
리스트.append()

타입.메서드()

시퀀스

문자열 ( String Type)

  • 문자들의 나열( sequentce of characters)

    • 모든 문자는 str 타입
  • 문자열은 작은 따옴표(‘)나 큰 따옴표(“)를 활용하여 표기

  • PEP8에서는 소스코드 내에서 하나의 문장부호를 선택하여 유지하도록 함

    print('hello')
    # hello
    print('철수','안녕')
    # 철수 안녕
    
  • 문자열 탐색 / 검증

    문법 설명
    s.find(x) x의 첫 번째 위치를 반환. 없으면 -1을 반환
    s.index(x) x의 첫 번째 위치를 반환. 없으면 오류를 발생
    s.isalpha() 알파벳 문자 여부
    *단순 알파벳이 아닌 유니코드 상 Letter
    s.isupper() 대문자 여부
    s.islower() 소문자 여부
    s.istitle 타이틀 형식 여부
  • 문자열 변경

    문법 설명
    s.replace(old, new[, count]) 바꿀 대상 글자를 새로운 글자로 바꿔서 반환
    s.strip([chars]) 공백이나 특정 문자를 제거
    s. split(sep=None, maxsplit=잘라내기 수) 공백이나 특정 문자를 기준으로 분리
    ‘separator’.join([iterable]) 구분자로 iterable을 합침
    s.capitalize() 가장 첫 번째 글자를 대분자로 변경
    s.title() '또는 공백 이후를 대문자로 변경
    s.upper() 모두 대문자로 변경
    s.lower() 모두 소문자로 변경
    s.swapcase() 대 <=> 소문자 서로 변경
  • 탐색 메서드

    • .find(x)

      x의 첫 번째 위치를 반환. 없으면 -1을 반환함.

      print('apple'.find('p'))
      # 1
      print('apple'.find('k'))
      # -1
      
    • .index(x)

      x의 첫 번째 위치를 반환. 없으면 오류 발생

      print('apple'.index('p'))
      # 1
      print('apple'.index('k'))
      # Error
      
  • 검증 메서드

    • .isalpha()

      print('abc'.isalpha())
      # True
      
    • .isupper()

      print('Ab'.isupper())
      # False
      
    • .islower()

      print('ab'.islower())
      # True
      
    • .istitle()

      print('Title Title!'.istitle())
      # True
      
  • 변경 메서드

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

      바꿀 대상 글자를 새로운 글자로 바꿔서 반환

      count를 지정하면, 해당 개수만큼 시행

      print('coone'.replace('o', 'a'))
      # caane
      print('wooooowoo'.replace('o', '!', 2))
      # w!!ooowoo
      
    • .strip([chars])

      특정한 문자들을 지정하면,

      양쪽을 제거(strip), 왼쪽을 제거(lstrip), 오른쪽을 제거(rstrip)

      문자열을 지정하지 않으면 공백을 제거함

      print('     와우!\n.strip()')
      # '와우!''
      print('     와우!\n.lstrip()')
      # '와우!\n'
      print('     와우!\n.rstrip()')
      # '     와우!'
      print('안녕하세요????'.rstrip('?'))
      # '안녕하세요'
      
    • .split(sep=None, maxsplit=-1)

      • 문자열을 특정한 단위로 나눠 리스트로 반환
        • sep은 구분할 기준. 기본값은 None(공백)
        • maxsplit은 잘라 낼 횟수인데 기본값-1 이면 모두 잘라내기이다
      print('a,b,c'.split('_'))
      # ['a,b,c']
      print('a b c'.split())
      # ['a', 'b', 'c']
      
    • ‘separator’.join([iterable])

      • 반복가능한(iterable) 컨테이너 요소들을 구분자(separator)로 합쳐 문자열 반환

        iterable에 문자열이 아닌 값이 있으면 Type Error 발생

      print(' '.join(['3', '5']))
      # 35
      
    • 기타

      msg = 'hI! Everyone.'
      print(msg)
      print(msg.capitalize())
      print(msg.title())
      print(msg.upper())
      print(msg.lower())
      print(msg.swapcase())
          
      # hI! Everyone.
      # Hi! everyone.
      # Hi! Everyone.
      # HI! EVERYONE.
      # hi! everyone.
      # Hi! eVERYONE.
      

    리스트

    • 변경 가능한 값들의 나열된 자료형
    • 순서를 가지며, 서로 다른 타입의 요소를 가질 수 있음
    • 변경 가능하며, 반복 가능함
    • 항상 대괄호 형태로 정의하며, 요소는 콤마로 구분
    문법 설명
    L.append(x) 리스트 마지막에 항목 x 추가
    L.insert(i,x) 리스트 인덱스 i에 항목 x를 삽입
    L.remov(x) 리스트 가장 왼쪽에 있는 항목(첫 번째) x를 제거
    항목이 존재하지 않을 경우, ValueError
    L.pop() 리스트 가장 오른쪽에 있는 항목(마지막)을 반환 후 제거
    L.pop(i) 리스트의 인덱스 i에 있는 항목을 반환 후 제거
    L.extend(m) 순회형 m의 모든 항목들의 리스트 끝에 추가 (+=과 같은 기능)
    L.index(x, start, end) 리스트에 있는 항목 중 가장 왼쪽에 있는 항목 x의 인덱스를 반환
    L.reverse() 리스트를 거꾸로 정렬
    L.sort() 리스트를 정렬 (매개변수 이용가능)
    L.count(x) 리스트에서 항목 x가 몇 개 존재하는지 갯수를 반환
    • 값 추가 및 삭제

      • .append(x)

        리스트에 값을 추가함

      cafe = ['starbucks', 'tomntoms', 'hollys']
      print(cafe)
      # ['starbucks', 'tomntoms', 'hollys']
                  
      cafe.append('banapresso')
      print(cafe)
      # ['starbucks', 'tomntoms', 'hollys','banapresso']
      
      • .extend(iterable)

        리스트에 iteable의 항목을 추가함

      cafe = ['starbucks', 'tomntoms', 'hollys']
      print(cafe)
      # ['starbucks', 'tomntoms', 'hollys']
                  
      cafe.extend(['cafe', 'test'])
      print(cafe)
      # ['starbucks', 'tomntoms', 'hollys', 'cafe', 'test]
      
      • .insert(i, x)

        정해진 위치 i에 값을 추가함

      cafe = ['starbucks', 'tomntoms']
      print(cafe)
      # ['starbucks', 'tomntoms']
      cafe.insert(0, 'start')
      print(cafe)
      # ['start', 'starbucks', 'tomntoms']
          
      # i의 값이 리스트 길이보다 길 경우 맨뒤로!
      
      • .remove(x)

        리스트에서 값이 x인 것 삭제

      numbers = [1, 2, 3, 'hi’]
      print(numbers)
      # [1, 2, 3, 'hi']
      numbers.remove('hi)
      print(numbers)
      # [1, 2, 3]
                         
      # 삭제할 값이 없으면 Error
      
      • .pop(i)

        정해진 위치 i에 있는 값을 삭제하고, 그 항목을 반환함

        i가 지정되지 않으면, 마지막 항목을 삭제하고 반환함

      numbers = ['hi', 1, 2, 3]
      # ['hi', 1, 2, 3]
      pop_number = numbers.pop()
      print(pop_number)
      # 3
      print(numbers)
      # ['hi', 1, 2]
      
      • .clear()

        모든 항목을 삭제함

      numbers = [1, 2, 3]
      print(numbers)
      # [1, 2 ,3]
      print(numbers.clear())
      # []
      
      • .index(x)

        x값을 찾아 해당 index 값을 반환

      numbers = [1, 2, 3, 4]
      print(numbers)
      # [1, 2, 3, 4]
      print(numbers.index(3))
      # 2
          
      print(numbers.index(100))
      # ---------------------
      # ValueError Traceback (most recent call last)
      # 2 print(numbers)
      # 3 print(numbers.index(3))
      # ----> 4 print(numbers.index(100))
      # ValueError: 100 is not in list
      
      • .count(x)

        원하는 값의 개수를 반환함

      numbers = [1, 2, 3, 1, 1]
      print(numbers.count(1))
      # 3
      print(numbers.count(100))
      # 0
      
      • .sort()

        원본 리스트를 정렬함. None반환

        sorted 함수와 비교할 것.

      numbers = [3, 2, 5, 1]
      result = numbers.sort()
      print(numbers, result)
      # [1, 2, 3, 5] None   원본 변경, 리턴 값은 None 
          
      numbers = [3, 2, 5, 1]
      result = sorted(numbers)
      print(numbers, result)
      # [3, 2, 5, 1] [1, 2, 3, 5]   => 함수는 원본 변경 없음
      
      • .reverse()

        순서를 반대로 뒤집음(정렬하는 것이 아님). None 반환.

      numbers = [3, 2, 5, 1]
      result = numbers.reverse()
      print(numbers, result)
      # [1, 5, 2, 3] None
      

컬렉션(순서가 없는 데이터 구조)

세트

  • 유일한 값들의 모음
  • 순서가 없고 중복된 값이 없음
  • 변경 가능하며, 반복 가능함
문법 설명
s.copy() 세트의 얕은 복사본을 반환
s.add(x) 항목 x가 세트 s에 없다면 추가
s.pop() 세트s에서 랜덤하게 항목을 반환하고, 해당 항목을 제거
세트가 비어 있을 경우, KeyError
s.remove(s) 항목 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반환

딕셔너리

  • 키-값 쌍으로 이뤄진 모음
    • key
    • value
  • 키와 값은 : 로 구분 됩니다. 개별 요소는 ,로 구분됩니다.
  • 변경 가능하며, 반복 가능함
students = {'홍길동': 30, '김철수': 25}
students['홍길동']
# 30
문법 설명
d.clear() 모든 항목을 제거
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가 딕셔너리 d에 없을 경우 v를 반환
d.update([other]) 딕셔너리 d의 값을 매핑하여 업데이트
  • 조회

    • .get(key[,default])
      • key를 통해 value를 가져옴
      • KeyError가 발생하지 않으며, default 값을 설정할 수 있음
    my_dict = {'apple': '사과', 'banana': '바나나'}
    print(my_dict.get('pineapple'))
    # None
    print(my_dict.get('apple'))
    # 사과
    print(my_dict.get('pineapple', 0))
    # 0
    
  • 추가 및 삭제

    • .pop(key[, default])
      • key가 딕셔너리에 있으면 제거하고 해당 값을 반환
      • 그렇지 않으면 default를 반환
      • default 값이 없으면 KeyError
    my_dict = {'apple': '사과', 'banana': '바나나'}
    data = my_dict.pop('apple')
    print(data, my_dict)
    # 사과 {'banana': '바나나'}
      
    my_dict = {'apple': '사과', 'banana': '바나나'}
    data = my_dict.pop('pineapple')
    print(data, my_dict)
    # ----------------
    # KeyError Traceback (most recent call last)
    # 1 my_dict = {'apple': '사과', 'banana': '바나나'}
    # ----> 2 data = my_dict.pop('pineapple')
    # 3 print(data, my_dict)
    # KeyError: 'pineapple'
    
    • .update([other])
      • 값을 제공하는 key, value로 덮어씁니다.
    my_dict = {'apple': '사', 'banana': '바나나'}
    my_dict.update(apple='사과')
    print(my_dict)
    # {‘apple’: ‘사과’, 'banana': '바나나'}
    

Updated: