파이썬(Python) 자료구조 1

BG·2021년 5월 17일
0

파이썬(Python)

목록 보기
4/7
post-thumbnail

1. 자료구조

데이터를 효과적으로 관리하는데 사용한다.

1-1. list

예를 들어 코스피에 상장된 여러 기업들의 목록을 가져온다 치자.
변수를 활용한 방법으로 각각의 기업 목록을 가져오기 위해서는
corporation1 = "삼성전자"
corporation2 = "LG전자"
corporation3 = "카카오"
이런식으로 기업의 개수만큼 변수를 만들고 할당해줘야 하는 불편함이 존재 한다.
하지만, 리스트를 활용하면 간편하게 기업목록 리스트를 만들수 있다.
corp_list = ["삼성전자", "LG전자", "카카오"...]
이런식으로 list자료구조를 활용하면 한번에 많은 기업들의 목록을 가져올수 있다.

1-2. list 사용법

1-2-1. list 생성

시시각각 변하는 당근의 가격을 저장한다고 치자.
4월1일 500원, 4월2일 600원, 4월3일 450원....
이런식으로 나열된 데이터들을 쉽게 저장하기 위해서는 리스트를 생성 하면 된다.

carrot_list = [500, 600, 450]

리스트에는 정수만 들어가는 것이 아니고 실수 데이터도 사용가능하다.

carrot_list = [500.5, 600.3, 450.1]

아래 처럼 문자와 숫자를 섞어서도 사용가능하다.

carrot_list = ["4월1일", 500, "4월2일", 600, "4월3일", 450]

리스트를 생성할때, 위와 같이 항상 초기데이터를 생성할 필요는 없다.

carrot_list = []

처럼 초기데이터 없이 빈 리스트도 생성이 가능하다.

1-2-2. list 인덱싱

아래와 같이 생성된 리스트가 있을때, 첫번째 데이터만을 가져오기 위해서는 어떻게 해야 할까?
carrot_list = [500, 600, 450]

리스트의 인덱스 값을 통해서 리스트가 가리키는 값에 접근할 수 있다.
인덱스의 첫번째 값은 1이 아닌 0부터 시작하는 것에 주의해야 한다.

carrot_list[0] --> 500의 값을 반환
carrot_list[1] --> 600의 값을 반환
cattor_list[2] --> 450의 값을 반환

반대로 인덱스를 활용하여 리스트의 값을 변경시킬수도 있다.

carrot_list[0] = 1000 --> carrot_list의 첫번째 값을 1000으로 변경한다.

그렇다면 크기가 3인 cattor_list에 cattor_list[3]으로 접근 하면 어떻게 될까?

최대크기 3인 리스트에 4번째 값을 접근하는 것이기 때문에 오류가 발생한다.

1-2-3. list 데이터 삽입

리스트의 데이터 삽입에는 2가지 방법이 있다.

1-2-3-1. append

carrot_list = [500, 600, 450]에서 append로 값을 삽입하면 가장 마지막에 위치하게 된다.

carrot_list.append(700)
결과 : carrot_list = [500, 600, 450, 700]

1-2-3-2. insert

append로 값을 삽입할 수 있는데, insert는 왜 필요할까?
append는 항상 마지막에 값이 추가 되지만, insert는 원하는 위치에 값을 추가할 수 있다.
carrot_list = [500, 600, 450]에서 insert로 값을 삽입하면,

carrot_list.insert(1, 200)
결과 : carrot_list = [500, 200, 600, 450]

1번 인덱스에 200을 입력 하였으므로, 1번 인덱스에 200이라는 값이 들어가고, 나머지 값들은 한칸씩 뒤로 밀리게 된다.

1-2-4. list slicing

리스트를 사용하다 보면 일정 부분만 잘라서 사용하고 싶을때가 있다.
그럴경우, 슬라이싱을 이용하면 된다.

1-2-4-1. 처음과 마지막 인덱스 지정 slicing

carrot_list = [500, 200, 600, 450] 리스트에서 3번째 값과 4번째 값만을 가져오고 싶으면 아래와 같이 사용한다.
3번째 값의 인덱스는 2이고 4번째 값의 인덱스는 3이지만 +1을 하여 4를 적는다.

carrot_slicing = carrot_list[2:4]
carrot_slicing = carrot_list[시작인덱스 : 마지막인덱스 + 1]
결과 : carrot_slicing = [600, 450]

1-2-4-2. 처음 or 마지막 인덱스만 지정 slicing

carrot_list = [500, 200, 600, 450] 리스트에서 처음부터 2번째 값 까지만 슬라이싱을 하고 싶다면

carrot_slicing = carrot_list[:2]
결과 : carrot_slicing = [500, 200]

2번째 값에서 마지막 까지 슬라이싱을 하고 싶다면
carrot_slicing = carrot_list[1:]
결과 : carrot_slicing = [200, 600, 450]

1-2. tuple

tuple도 list와 마찬가지로 여러 개의 데이터를 담아두는데 사용한다.
단, 튜플과 리스트의 차이점에 주의하자.

  • 리스트는 '[', ']'를 사용하지만 튜플은 '(', ')'를 사용한다.
  • 튜플 원소의 변경은 불가능 하다.
  • 리스트 보다 튜플이 빠르다.
  • 생성 후, 변경이 필요 없는 데이터라면 튜플이 좋다.(속도적인 측면에서)

1-2-1. tuple 생성

리스트와 마찬가지로 생성 하면 된다.
단, 리스트와는 달리 '(', ')'를 사용한다는 것에 주의 한다.

tuple = (1, 2)
tuple = (1, 2, "당근")

1-2-2. 요소 추가

아래와 같이 + 연산자로 요소추가가 가능하다.
아래에서 하나의 원소를 튜플에 추가할때, (3,) 이렇게 적어준 이유는
tuple += (3)이 되버리면 tuple의 요소 3을 추가하는 것이 아닌 그냥 숫자 3을 추가하는것이 되어 버려서 오류가 발생한다.
(3,) 이렇게 적어주어야 기존 튜플에 튜플타입의 3이 요소에 추가가 된다.

정리하자면 튜플타입에 튜플타입의 3을 넣을수는 있지만, 튜플타입에 숫자타입인 3을 직접적으로 넣을수는 없다.
(튜플은 하나의 원소로만 존재할수는 없기에 (3)이 아닌, (3,)으로 사용한다.)

tuple = (1, 2)
tuple += (3,)
tuple += (4,5)

print(tuple)

결과 : (1,2,3,4,5)

1-2-3. tuple 인덱싱

튜플의 데이터에 접근하는 방법은 list와 동일하다.

tuple = ("당근", "사과")
tupe[0]
결과 : 당근

1-2-4. tuple slicing

'(', ')'를 사용한다는 것 외에는 리스트와 동일하다.

profile
글쎄...?

0개의 댓글