Good to Go

가벼운 시도의 반복이 새로운 가능성을 만들어주길

자기계발(경영)

데이터 마케팅python data type _ List 연속형 데이터(Sequential Data Types), 슬라이싱

on and on 2022. 5. 5. 23:12

Q. 숫자 100개를 한번에 다루려고 한다.

<=> 하나의 변수에 숫자 100개를 저장하고 싶다. 어떻게 해야할까?

 

A. 연속형 데이터 타입을 사용하자!

 


  • 연속형 데이터란, 하나의 변수가 하나의 데이터를 가지고 있던 숫자형 데이터와 달리, 여러개의 데이터를 하나의 변수에 가지고 있는 데이터 타입이다.
  • 연속형 데이터 타입에는 리스트(List), 튜플(Tuple), 문자열(String)이 있다. (문자열을 문자들의 나열로 인식하기 때문에, 연속형 데이터이다.)
  • 연속형 데이터의 크기 제한은 없다. 하지만, 사용하는 컴퓨터의 가용 메모리 용량을 인지하며 사용해야 한다.
  • 각 연속형 데이터 타입마다 특징이 다르다. 그 특징을 파악하여 용도에 맞는 데이터 타입을 사용하는 것이 중요하다.

(OPTIONAL) 사전(dictionary) 타입은 associative array라고 불리며, 흔히 알고있는 Hash table 구조이다.

 


 리스트(List)

  • 가장 많이 사용되는 연속형 데이터 타입이자, 굉장히 유연한 구조를 가지고 있어 대부분의 데이터를 편하게 다룰 수 있다. (나열)
  • 파이썬에서  ]를 이용하여 표현한다. e.g. [1, 2, 3]
  • 리스트의 원소는 쉼표로 구분되며, 리스트의 원소는 아무 데이터 타입이나 가능하다. 리스트조차 가능하다.
  • 리스트를 이용하면 파이썬에서 다루는 대부분의 데이터는 아무 무리없이 다룰 수 있다. 하지만 수정이 자유롭기 때문에 수정을 하면 안되는 경우에는 사용하면 안된다. ex. 튜플인 경우

 

2x2 행렬 표현 ( 2차원 리스트 ) 리스트 안에 리스트, 리스트가 있는 것 

 


Indexing  (확장하면 searching)

 

  • 연속형 데이터들은 하나의 변수에 여러가지 데이터를 가지기 때문에 여러 데이터를 접근하는 방법이 필요하다.

     어떤 데이터가 어디에 있는지 알고 있는 목차 정보가 있기 때문에 가능 (이래서 인덱스가 필요)

  • 이를 위해 indexing이라는 기법이 있다. 말그대로 index를 통해 접근(access)하는 방법이다. (어떤 원소가 몇 번째에 있는지 알기 위해서)
  • 리스트의 index는 맨 앞부터 0으로 시작하며, 1씩 증가하는 정수 index를 사용한다.

파이썬에서 인덱싱을 하는 방법은 대괄호를 쓰고, 리스트 0을 쓰면 이제부터 첫번째는 0인 것.

0부터 시작해서 0층이 있는 것.

 

ex) 

In   L = [1, 2, 3, 4, 5]

     L

Out [1, 2, 3, 4, 5]

 

# L의 첫번째 원소

In     L [0]  #index 0

Out   1

 

e.g. [1, 2, 3]이면 첫번째 원소는 index가 0이고, 두번째 원소는 index가 1이다.

  • 파이썬에서는 음수 index도 제공하는데, 이는 뒤쪽부터 접근할 수 있는 방법이다.

# L의 5번째 원소

In L [4] #index 5 

Out 5


# L의 마지막 원소

In L [-1]  # L [4] 다섯번째에서 마지막이기 때문

Out 5

 

e.g L = [1, 2, 3]이면 L[0]은 1이고, L[2]는 L[-1]이며 3이다.

 

In len[L] #list의 길이

Out 5

 

# 전체길이가 5인데 다섯 번째 원소가 4다.

인덱스는 전체길이 -1 이다. 

In  L [ len (L)-1 ]

Out 5

 

#그래서 뒤에를 생략하면 맨 뒤가 된다.

In  L [ -1 ] # 실제로 길이에서 -1한 것과 같다. 

Out 5

 

****가장 중요 (0부터 시작한 것을 잊지말자)

In L [ -3 ] # L [ len(L)-3 ] == L [2] -> 3번째 원소 == 3

= 뒤에서 세번째라는 의미 


# indexing 을 이용한 연산, L의 첫번째, 두번째 원소를 가져다가 더한다.

In    L [0] + L[1]

Out  3

 

 

e.g. [1, 2, 3]이면 뒤에서 첫번째(맨 마지막)원소는 index가 -1이고, 뒤에서 두번째 원소는 index가 -2이다.

  • index를 통해 접근하는 방법은 해당 변수이름에 []를 사용하며, []안에 index를 넣어서 접근할 수 있다.

 

List of List

In

L2 = [1, [2, 3], 5]

L2

Out

[1, [2, 3], 5]

 

In # L2에서 2에 접근하기 위해 indexing을 해보자.

L2 [1] [0]  #두번째 원소의 첫번째 원소

# L2 [1] #[0]

# [2, 3] [0]

Out

[2, 3]

 


Slicing ***

전체 리스트의 일부를 자르는 것. 

슬라이싱은 리스트와 비슷한 구조인 numpy array와 pandas series, dataframe에도 많이 이용된다. 

 

리스트의 index와 ;을 사용해서 슬라이싱을 할 수 있다. 

슬라이싱은 콜론: 을 써서 가능하다

 

In 

L = [1, 2, 3, 4, 5]

L

 

In

# L의 첫번째부터 index2까지 자르기

L [ 0 : 2 ]  # [1, 2] # L [0], L [1]  

Out

[ 1, 2 ]

 

 

-> 슬라이싱에서는 맨 마지막 숫자를 포함하지 않는다. 

**뒤에 있는 숫자 하나가 생략된다.

예를 들어 0, 2이라면 2는 포함되지 않는 것이다, 2 하나 전까지  

 

In

# L의 두번째부터 index4까지 자르기

L [ 1 : 4 ]  # L [ 1 ], L [ 2 ] , L [ 3 ]   -> 맨 마지막 숫자 포함 안하기 때문

Out

[ 2, 3, 4 ]

 

 

시작 index를 생략하면, 자동으로 index는 0이 된다.

L [ : 3 ] = L [ 0 : 3 ] 

-> 앞에서부터 3개를 부를래

Out

[ 1, 2, 3 ]

 

끝  index를 생략하면, 자동으로 index는 리스트의 길이가 된다. 

왜 리스트의 길이일까?
L[1 : leng(L)-1]

L [1 : -1]

이거는 안된다

L[1 : leng(L)]  == L[1 : ]