NEVERTHELESS

[Python] 2차원 리스트 - 파이썬 자료구조

by Ungbae

본 게시글은 학부 수업 '컴퓨터 프로그래밍 1' 과 참고 교재 '파워 유저를 위한 파이썬 Express' 내용을 참고하여 이해한 내용을 정리하였습니다.

 

 

 

 

2차원 리스트

 

 

 

 

 

2차원 리스트 == 2차원 테이블

 

 

 

 

2차원 리스트랑 텐서가 서로 비슷한 개념인가?

 

개념적으로는 비슷한 면이 있으나, 정확히 같다고 보기는 어렵다.

  • 둘 다 다차원 데이터를 저장하는 구조
  • 인덱스를 통해 특정 위치의 데이터에 접근한다.
  • 행렬 연산의 기본이 되는 구조

라는 점은 유사하다. 

 

2차원 리스트는 Python의 기본 자료구조. 서로 다른 타입의 데이터를 섞어서 저장할 수 있다. 각 행의 길이가 달라도 된다.

텐서는 수학적 그리고 머신러닝의 개념으로 보통 같은 타입의 수치 데이터만 저장하고, 정형화된 형태(shape)를 가진다.

 

 

# 2차원 리스트 - 이런 것도 가능
list_2d = [[1, 'hello'], [2, 3, 4]]

# 텐서는 보통 이런 형태
# [[1, 2, 3],
#  [4, 5, 6]]  <- 모든 행이 같은 길이, 같은 타입

 

Python에서 텐서를 다룰 때는 보통 NumPy 배열이나 PyTorch/TensorFlow의 텐서 타입을 사용한다. 2차원 리스트는 구조를 이해하는 데에 텐서 개념을 떠올리면 된다. 하지만 세부 개념은 다르다!

 

 

 

 

 

2차원 리스트의 구현

 

 

  • 리스트의 리스트로 구현된다.
  • 리스트 안에 리스트

 

 

 

2차원 리스트 동적 생성

 

# 동적으로 2차원 리스트 생성

rows = 3
cols = 4

s = []
for row in range(rows):
	s += [[0]*cols]		# 2차원 리스트끼리 합쳐진다.

print("s =", s)



# 출력 결과
# s = [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]

 

 

 

주의!!!

 

실제로는 동적으로 2차원 리스트를 생성하는 경우가 더 많다는 것

 

rows = 3
cols = 4

s = []
for row in range(rows):
	s += [0]*cols		# 1차원 리스트끼리 합쳐진다.
    
print("s =", s)


# 출력 결과

# s = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

 

 

 

 

2차원 리스트 요소 접근

s = [ [1, 2, 3, 4],
	  [5, 6, 7, 8],
      [10, 11, 12, 13]]
      
# 행과 열의 개수를 구한다.
rows = lens(s)
cols = len(s[0])

for r in range(rows):
	for c in range(cols):
    		print([s[r][c], end-",")
        
    	print()


# 출력 결과

# 1, 2, 3, 4,
# 5, 6, 7, 8,
# 9, 10, 11, 12,

 

 

 

2차원 리스트를 함수로 넘기기

def sum(numbers):
	total = 0
	for i in range(len(numbers)):
		for j in range(len(numbers[0])):
			total = total + numbers[i][j]
return total

2차원 리스트도 함수로 전달할 수 있다. 함수 안에서는 2차원 리스트의 차원을 추출할 수 있다. 2차원 리스트를 s라고 치면 len(s)는 행의 개수이고 len(s[0])의 열의 개수.

 

 

 

 

 

리스트 개념 종합 요약

 

  • 리스트는 일련의 값을 저장하는 컨테이너
  • 리스트의 각 요소는 인덱스라는 정수로 접근.    e.g. i 번째 요소는 mylist[i]
  • insert 메서드를 사용하여 리스트의 
  • pop() 메서드를 사용하여 리스트의 임의 위치에서 요소를 제거할 수 있다.
  • remove 메서드를 사용하여 리스트에서 원하는 요소를 제거할 수 있다.
  • + 연산자를 사용하여 두 리스트를 연결할 수 있다.
  • 슬라이스 연산자 (:)를 사용하여 부분 리스트를 만들 수 있다.
  • 리스트 함축은 기존 리스트를 기반으로 새로운 리스트를 작성하는 방법

 

블로그의 정보

그럼에도 불구하고

Ungbae

활동하기