[파이썬데이터분석] 내장 자료구조 1

imacusirius·2021년 11월 7일
0

파이썬데이터분석

목록 보기
7/12

튜플

  • 1차원의 고정된 크기를 가지는, 변경 불가능한 순차 자료형
  • 생성하는 방법: 쉼표로 구분된 값 대입
tup = 4, 5, 6
# tup
(4, 5, 6)
  • 괄호를 사용해 값을 묶어 주면 중첩된 튜플 정의 가능
tup = (1,2), (3,4)
# tup
((1,2), (3,4))
  • 모든 순차 자료형이나 이터레이터는 tuple 메서드를 호출해 튜플로 변환 가능
tuple([1, 5, 8])
# tup
(1, 5, 8)
  • 대괄호를 이용해 원소에 접근 가능함, 색인은 0부터
  • 객체 자체는 변경할 수 있지만, 생성된 이후에는 각 슬롯에 저장된 객체 변경 불가능
tup = tuple([‘foo’, [1,2], True])
tup[2] = False <— 오류 발생
  • 튜플 내에 저장된 객체는 그 위치에서 바로 변경 가능
tup[1].append(3)
# tup
(‘foo’, [1,2,3], True)
  • + 연산자 이용하면 튜플 이어붙일 수 있음
  • 튜플에 정수 곱하면 튜플의 복사본이 반복되어 늘어남

튜플에서 값 분리

  • 튜플과 같은 표현의 변수에 튜플을 대입하면 등호 오른쪽에 있는 변수에서 값을 분리함
tup = (4, 5, 6)
a, b, c = tup

# b
5
  • 중첩된 튜플을 포함하는 순차 자료형에도 적용됨

  • 튜플이나 리스트 순회할 때도 이 기능을 이용할 수 있음

  • 튜플의 처음 몇몇 값을 ‘끄집어내야’ 할 상황에서 *rest 활용

    • 함수의 시그니처에서 길이를 알 수 없는 긴 인자를 담기 위한 방법으로도 사용
values = 1, 2, 3, 4, 5
a, b, *rest = values

# a, b
(1, 2)

# rest
[3, 4, 5]
  • rest는 필요 없는 값을 무시하기 위해 사용하기도 함.
    • rest 이름 자체에는 특별한 의미 X
    • 불필요한 변수라는 것 나타내기 위해 _를 사용하는 관습도 있음
a, b, *_ = values

튜플 메서드

  • 튜플은 크기와 내용이 변경 불가능하므로 인스턴스 메서드가 많지 않음
  • 주어진 값과 같은 값이 몇 개 있는지 반환하는 count 메서드가 유용하게 사용됨

리스트

  • 리스트는 크기나 내용의 변경이 가능
  • 대괄호 []나 list 함수를 사용해 생성 가능
  • 객체의 1차원 순차 자료형, 많은 함수에서 교차적으로 사용 가능
  • list 함수는 이터레이터나 제너레이터 표현에서 실제 값을 모두 담기 위한 용도로도 자주 사용

원소 추가하고 삭제하기

  • append 메서드 사용해서 리스트 끝에 새로운 값 추가

  • insert 메서드 사용하면 리스트의 특정 위치에 값 추가 가능

    • 값 추가하려는 위치는 0부터 리스트 길이까지의 값이어야 함
  • pop 메서드 이용하면 특정 위치의 값을 반환하고 해당 값을 리스트에서 삭제

  • remove 메서드를 이용하면 원소를 삭제할 수 있음

    • 삭제는 리스트 제일 앞에 위치한 값부터 이루어짐
  • in 예약어 사용하면 리스트에 어떤 값이 있는지 검사할 수 있음

  • not 예약어를 사용하면 in 예약어와 반대 의미로 사용

    • 리스트의 모든 값을 일일이 검사하므로 속도가 많이 느림

리스트 이어붙이기

  • 튜플과 마찬가지로 + 연산자를 이용해 두 개의 리스트를 합칠 수 있음
  • 리스트를 미리 정의해 뒀다면 extend 메서드를 사용해 여러 개의 값을 추가할 수 있음
  • 큰 리스트일수록 extend를 이용해 기존 리스트에 값을 추가하는 것이 나음

정렬

  • sort 함수를 이용하면 새로운 리스트를 생성하지 않고, 있는 그대로 리스트를 정렬할 수 있음
  • sorted 함수를 이용하면 순차 자료형의 정렬된 복사본을 생성함

이진 탐색과 정렬된 리스트 유지

  • 내장 bisect 모듈은 이진 탐색과 정렬된 리스트에 값을 추가하는 기능 제공
    • bisect.bisect 메서드는 값이 추가될 때 리스트가 정렬된 상태를 유지할 수 있는 위치를 반환
    • bisect.insort는 실제로 정렬된 상태를 유지한 채 값을 추가

슬라이싱

  • 리스트와 같은 자료형들은 색인 연산자 [] 안에 start:stop을 지정해 원하는 크기만큼 잘라낼 수 있음
  • 슬라이스에 다른 순차 자료형을 대입하는 것도 가능함
  • 색인의 시작 혹은 끝 중 하나는 생략할 수도 있음
    • 시작만 포함할 경우, 슬라이싱 결과 개수는 stop - start
  • 음수 색인은 자료형의 끝에서부터의 위치를 나타냄 (ex: [-5:]

0개의 댓글