본문 바로가기
  • Hello_
Python/Error

[Python_Error] TypeError: list indices must be integers or slices, not tuple

by LDwDL 2023. 2. 15.
728x90
반응형

본 포스팅은 업무 중 발생했던 오류들을 예시를 통해 어떻게 해결을 하는지 작성하고자 합니다.

 

TypeError: list indices must be integers or slices, not tuple

해당 오류는 list 형식의 데이터를 numpy처럼 사용하고자 했을 때 자주 보게 되는 오류입니다. 

error

 

아래 예시와 같이 list가 2D 형태이고 첫 번째 축이 아닌 두 번째 이상 축에 인덱싱을 하고자 할 때 발생했습니다.

m = [[0, 4], [1, 0], [2, 2], [3, 3], [4, 1]]

m[:,1]
"""
--------------------------------------------------------------------------- 
TypeError Traceback (most recent call last) /aidata/lung/WORKSPACE/workspace_s/ncc/inference copy.ipynb Cell 16 in <cell line: 1>() 
----> 1 m[:,1] 

TypeError: list indices must be integers or slices, not tuple
"""

 

우선 list는 내부 배열에서 각 요소의 크기가 달라도 되지만, numpy는 각 요소의 크기가 통일돼야 한다는 차이가 있습니다. 

 

따라서 list는 서로 크기가 다른 요소들을 감싸고 있는 형태이기 때문에 첫 번째 축에서 각 요소를 불러오는 건 가능하지만 요소들이 서로 크기가 다르기 때문에 2번째 이상되는 축에서 slicing(':')을 활용하여 가져올 수 없습니다.

 

만약 numpy처럼 가져오고 싶다면 하나씩 요소들을 반환하고 또 내부에 인덱스를 입력하여 값들을 반환하면 됩니다.

m[0] # [0, 4]
m[1] # [1, 0]
m[2] # [2, 2]
m[3] # [3, 3]
m[4] # [4, 1]

print(m[0][1],m[1][1],m[2][1],m[3][1],m[4][1]) # 4 0 2 3 1

 

반면에 numpy는 내부 요소들의 크기를 통일시켜 한번에 감싸기 때문에 내부 요소들의 크기가 통일되어 2차원 이상의 축에서도 slicing 할 수 있습니다.

 

numpy와 list의 차이점은 아래의 링크를 참고하면 됩니다.

 

[Python] 리스트 (List) vs 넘파이 (Numpy) 어레이 차이

본 포스팅에서는 리스트와 넘파이 어레이의 차이점에 대해 얘기하고자 합니다. 선언 우선 list_ex와 numpy_ex로 리스트와 넘파이 어레이의 예시를 구성해 봅시다. 넘파이 어레이 선언은 리스트를 np.

baembaembaem.tistory.com

 

따라서 아래와 같이 list를 numpy로 변경하여 slicing 해준다면 오류 없이 원하는 값들을 반환할 수 있습니다.

type(m) # list

m_np = np.array(m)

print(m_np[:,0]) # [0 1 2 3 4] 
print(m_np[:,1]) # [4 0 2 3 1]

 

numpy와 list간의 차이를 잘 비교하여 적시적소에 잘 사용하면 됩니다.

 

 

728x90
반응형

댓글