지식저장소

[자료구조] list 와 Array(배열)

Magin 2023. 6. 27. 23:24
728x90

1. 파이썬 리스트

  • 파이썬에서 리스트는 내장된 데이터 구조로 items의 collection을 가진다.
  • 리스트는 "[ ]" 안에 묶인다. ex) [1, 2, 3]
  • 리스트는 변경이 가능하다. (추가 및 제거 가능)
  • 리스트는 중복이 가능하다. ex) [1, 1, 1]
  • 리스트는 여러가지 데이터 타입을 넣을 수 있다. str, int 등등

2. 파이썬 배열

  • 파이썬에서 배열도 리스트랑 같이 내장된 데이터 구조로 items의 collection을 가진다.
  • 리스트의 특징과 유사하다. ex) 대괄호, 정렬, 변경가능 ,중복가능
  • 반면, 넘파이 어레이는 숫자형과 문자열이 섞이면 모두 문자열로 전환됩니다.(한가지 자료형만 허용한다.)

- Numpy 

import numpy as np
array = np.array(["1", 2, 3])
print(array)
['1' '2' '3']
<class 'numpy.str_'>

 

선언 조건

2차원 이상의 배열 구조를 나타낼 수 있지만 문제는 Numpy에서 내부 배열의 크기가 같아야한다.

list_a = [[1], [2, 3], [4, 5, 6]] # 가능O
array_b = np.array([[1], [2, 3], [4, 5, 6]]) # 개수가 달라서 array 선언 불가능

#array_b 출력결과
Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray.

 

 

연산

리스트 연산

  • 리스트의 연산은 데이터를 이어 붙이는 concatenate를 수행합니다.
  • 다른 연산은 허용X 
    하지만, 곱셉의 경우 원소 복사 수행합니다. ex) [1, 2, 3] * 3 = [1, 2, ,3, 1, 2, 3, 1, 2, 3]

Numpy 연산

  • 항목 간 연산을 수행합니다.
  • 리스트와 다르게 다른 사칙연산이 가능합니다.
  • 실수에 대한 사칙 연산도 가능하다. ex) a + 2
  • 여기서 연산을 할때 각 객체의 개수는 같아야 합니다.
#리스트 연산
a = [1, 5, 7]
b = [2, 4, 8]

a+b # [1, 5, 7, 2, 4, 8]

a*3 # [1, 5, 7, 1, 5, 7, 1, 5, 7]


# Numpy 연산
a = np.array([1, 5, 7])
b = np.array([2, 4, 8])

a+b # array([3, 9, 15])
a+2 # array([3, 7, 9])
a*3 # array([3, 15, 21])

메소드

자료형 종류가 다르기 때문에 지원하는 메소드 종류도 다릅니다.

리스트 : append, extend, remove 등등 가능합니다. (해당 메소드는 Numpy에서 불가능)

넘파이: mean, argmax, round 등등 사용가능합니다 (해당 메소드는 list에서 불가능)

연산 속도

같은 연산의 경우 일반적으로 Numpy가 연산에 최적화 되어있습니다.

import time

# 리스트 연산 속도
a = list(range(10 ** 8))

start = time.time()
for i in range(10 ** 8):
    a[i] *= 2
end = time.time()
print(end - start) # 약 17.35초

# 어레이 연산 속도
a = np.array(range(10 ** 8))

start = time.time()
a = a * 2
end = time.time()
print(end - start) # 약 1.35초

Numpy가 약 13배정도 연산속도가 빠른 것으로 보여집니다.

728x90