본문 바로가기

파이썬/자료구조

[파이썬 자료구조] 파이썬에서 배열과 리스트의 차이

 

1. 파이썬에서 리스트란?

리스트는 파이썬에 내장된 데이터 구조로 items의 collection을 가진다.

  • 리스트의 아이템들은 대괄호로 묶인다. [item1, item2, item3]
  • 리스트는 정렬되어 있다.  인덱스로 각 아이템에 접근할 수 있게 해 준다.
  • 리스트는 변경 가능하다. 리스트가 만들어지고 추가하거나 제거할 수 있다.
  • 리스트는 중복가능하다. 인덱스로 관리되므로 [item1, item1]도 가능하다.
  • 리스트는 여러 가지 데이터 타입이 가능하다. 같은 리스트에 object, string, integer를 합칠 수 있다.

 

코드

list = [1,2,3,4,5]
print(list)
print(type(list))

결과

[1, 2, 3, 4, 5]
<class 'list'>

 

 

 

2. 파이썬에서 배열이란?

배열도 리스트와 같 파이썬에 내장된 데이터 구조로 items의 collection을 가진다.

리스트가 가졌던 특징들처럼 대괄호, 정렬, 변경 가능, 중복 가능하다.

하지만 어떤 배열을 배열의 종류를 사용하냐에 따라 여러가지 데이터 타입이 가능할 수도 가능하지 않을 수도 있다.

 

2-1 Array module

코드

import array as arr
array_1 = arr.array("i", [2, 4, 6, 8])
print(array_1)
print(type(array_1))

결과

array('i', [2, 4, 6, 8])
<class 'array.array'>

파이썬의 array module은 모든 배열의 원소들이 같은 데이터 타입일 것을 요구한다.

여기서 "i" 부분은 array_1의 원소들이 다 정수인 것을 나타낸다.

 

 

 

 

2-2 Numpy

코드

import numpy as np
array_2 = np.array(["numbers", 2, 4, 6, 8])
print (array_2)
print(type(array_2))

결과

['numbers' '2' '4' '6' '8']
<class 'numpy.ndarray'>

numpy의 경우 서로 다른 데이터타입이 가능하다.

"numbers'는 문자열이고 2,4,6,8은 정수형이다.

 

 

 

 

3. 리스트와 배열의 차이

  • 배열은 선언돼야 하지만 리스트는 그렇지 않다.
  • 배열은 array module이나 numpy를 이용하지만 리스트는 대괄호로 원소들을 감싸주기만 하면 된다.
  • 배열은 데이터를 메모리에 조밀하게 저장가능하다. 리스트는 쉬운 원소 추가를 위해 큰 메모리가 필요하다. 
  • 배열은 한 원소에 대해 추가, 삭제, 업데이트를 하기에 변경이 어렵다. 리스트는 반면 변경이 쉽다.
  • 배열은 사칙연산에 뛰어나다. 리스트는 직접적으로 수학적 연산이 안된다.
  • 배열은 모든 원소가 같은 크기를 가져야 한다. 리스트는 리스트 안에 중첩이 가능하다. (리스트 안에 리스트)

 

3-1 배열과 리스트의 사칙연산 차이

배열의 경우

import numpy as np
array = np.array([2, 4, 6, 8])
division = array/2
print(division)
print (type(division))
[1. 2. 3. 4.]
<class 'numpy.ndarray'>

 

 

리스트의 경우

list = [2, 4, 6, 8]
division = list/2
TypeError                                 Traceback (most recent call last)
 in ()
      1 list = [2, 4, 6, 8]
----> 2 division = list/2

TypeError: unsupported operand type(s) for /: 'list' and 'int'

리스트의 경우 바로 연산이 안 되는 것을 볼 수 있다.

물론 연산이 되게 바꿀 수 있지만, 사칙연산은 배열이 더 수월하다는 것을 보여주는 예시이다.

 

수정결과

list = [2, 4, 6, 8]
for i in range(len(list)):
    list[i] = list[i]/2
print(list)
print(type(list))
[1.0, 2.0, 3.0, 4.0]
<class 'list'>

 

 

 

4. 언제 리스트, 배열을 쓰는게 좋을까?

  • 리스트가 좋은 경우
    • 상대적으로 적은 양의 아이템을 저장하고, 수학적 연산을 필요로 하지 않을 때 좋다.
    • 리스트가 배열보다 속도가 더 빠르다. 
    • 파이썬의 배열은 파이썬의 리스트를 기반으로 한다.
  • 배열이 좋은 경우
    • 매우 큰 양의 양의 아이템을 저장할 때 좋다. 효과적인 데이터 저장을 한다.
    • 각 아이템 간의 수학적 연산을 할 경우 배열이 좋다.
    • 데이터 분석이나 데이터 사이언스는 주로 Numpy에 의존한다.

 

 

 

 

 

 

 

참고 사이트

https://learnpython.com/blog/python-array-vs-list/

https://favtutor.com/blogs/python-array-vs-list