14_자료구조(1)

ryu·2023년 5월 19일
0

자료구조

자료구조란?

  • 여러 개의 데이터가 묶여있는 자료형을 컨테이너 자료형이라고하고, 이러한 컨테이너 자료형의 데이터 구조를 자료구조라고 함

다양한 자료구조

  • 각 컨테이너 자료형에 따라서 차이가 있으며, 파이썬의 대표적인 컨테이너 자료형으로는 리스트, 튜플, 딕셔너리, 세트 등이 있음
    • List: students = ['홍길동', '박찬호']
    • Tuple: jobs = ('의사', '속기사')
    • Dic: scores = {'kor': 88, 'mat': 90}
    • Set: allSales = {100, 1450}

리스트(List)

리스트란?

  • 배열과 같이 여러 개의 데이터를 나열한 자료구조

리스트의 선언

  • [ ]를 이용하여 선언하고, 데이터 구분은 ','를 이용함

  • 리스트 안에 들어있는 각각의 데이터를 아이템(요소)라고 함

  • 숫자, 문자, 논리형 등 모든 기본 데이터를 같이 저장할 수 있음

  • 리스트에 또 다른 컨테이너 자료형 데이터를 저장할 수도 있음

    students = ['홍길동', '박찬호']
    data = ['홍길동', 10, True, [1, 2]]

인덱스

  • 인덱스란 아이템에 자동으로 부여되는 번호표를 의미
  • 0번부터 시작함. 즉 아이템이 총 3개라면 인덱스는 0~2
  • 자동으로 부여되기 때문에 임의로 변경할 수 없음

아이템 조회

  • 인덱스를 이용하여 조회가 가능
  • 리스트[인덱스]와 같은 문법으로 조회 가능
  • 범위를 벗어나면 안됨

아이템의 개수

  • 리스트의 길이는 리스트에 저장된 아이템의 개수를 의미
  • len()과 반복문을 이용하여 리스트의 아이템 조회가 가능

for문을 이용한 조회

  • for 문을 이용하면 리스트의 아이템을 자동으로 참조할 수 있음
  • 조건문과 함께 사용할 수 있음
  • for문 이외에도 while문으로도 조회가 가능

enumerate() 함수

  • enumerate() 함수를 이용하면 아이템을 인덱스와 함께 열거할 수 있음

    sports = ['농구', '수구', '축구']
    
    for idx, value in enumerate(sports):
      	print(f'{idx}: {value})
    
    '''
    0: 농구
    1: 수구
    2: 축구
    '''
  • 문자열에도 적용할 수 있음

리스트에 아이템 추가하기

  • append(데이터) 함수를 이용하면 리스트의 마지막에 아이템을 추가할 수 있음

  • insert(인덱스, 데이터) 함수를 이용하면 특정 위치(인덱스)에 아이템을 추가할 수 있음

    celebrities = ['유재석', '강호동']
    celebrities.append('이수근')	# ['유재석', '강호동', '이수근']
    
    celebrities.insert(1, '은지원')	#['유재석', '은지원', '강호동', '이수근']

    insert()의 경우 삽입 위치가 리스트의 길이+1 보다 크더라도 오류가 발생하지 않고 맨 마지막에 데이터가 추가됨

리스트의 아이템 삭제

  • pop(인덱스) 함수를 이용하여 리스트의 특정 위치의 아이템을 삭제할 수 있음
  • 인덱스를 생략하면 기본적으로 맨 마지막에 있는 아이템을 삭제함

특정 아이템 삭제

  • remove(값) 함수를 이용
  • remove()는 한 개의 아이템만 삭제 가능함. 만약 삭제하려는 데이터가 2개 이상이라면 while문을 이용해야 함
    • 삭제하려는 데이터가 2개 이상일 경우 한번의 remove()를 통해서는 앞쪽에 위치한 값부터 삭제됨
  • 삭제하려는 값이 리스트에 없다면 에러가 발생함

리스트 연결(확장)

  • extend() 함수를 이용하면 리스트에 또 다른 리스트를 연결(확장) 할 수 있음
    • 매개변수로는 반드시 리스트가 들어와야하는 것은 아니고 iterable한 객체가 들어오면 됨
    • 따라서 셋, 튜플, 딕셔너리 등도 받을 수 있고, 딕셔너리가 인자로 주어지는 경우에는 key값들이 추가됨
  • 덧셈 연산자를 이용해서 리스트를 연결할 수도 있음
  • extend()와 덧셈 연산자의 차이는 extend()는 기존에 있는 리스트를 확장시키는 개념이라면 덧셈 연산자는 두 개의 리스트를 합친 새로운 리스트를 생성하는 것

아이템 정렬

  • sort() 함수를 이용하여 아이템을 정렬할 수 있음
    • reverse=True로 설정하면 내림차순, 생략시 오름차순이 기본값

리스트 순서 뒤집기

  • reverse()를 사용하면 아이템 순서를 뒤집을 수 있음

리스트 슬라이싱

  • [n:m]을 이용하여 리스트에서 원하는 아이템만 가져올 수 있음
  • n번 인덱스부터 m-1번 인덱스까지 가져옴
  • n을 생략하면 인덱스 0이 기본값이고, m을 생략하면 리스트의 전체 길이가 기본값
  • n, m 모두 생략가능

문자열 슬라이싱

  • 문자열도 리스트 슬라이싱과 마찬가지로 [n:m]을 사용하여 가능

슬라이싱 단계 설정

  • 슬라이싱할 때 단계를 설정할 수 있음
  • [n:m:step]
  • step이 음수이면 역순으로 데이터를 가져오며, 이때 nm의 설정에도 주의
  • 슬라이싱할 때 n, m이 리스트의 범위를 벗어나더라도 오류가 발생하지는 않음

슬라이싱을 통한 아이템 변경

  • 예시

    students = ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은']
    students[1:4] = ['park chanho', 'lee yonggyu', 'gang hodong']
    print(students) # ['홍길동', 'park chanho', 'lee yonggyu', 'gang hodong', '박승철', '김지은']

    이 때 새로 변경할 데이터의 길이가 기존 데이터의 길이와 같을 필요는 없음

0개의 댓글