TIL

TIL.7 2차원 리스트_2

codermun 2020. 10. 15. 21:17
728x90
반응형

## 반복문으로 리스트 만들기

a = [] # 빈 리스트 생성

 

for i in range(10):

a.append(0) # append로 요소 추가

 

::

[0, 1, 2...9]

# for 반복문으로 1차원 리스트 만들기


a = [] # 빈 리스트 생성

 

for i in range(3):

line = [] # 안쪽 리스트로 사용할 빈 리스트 생성

for j in range(2):

line.append(0) # 안쪽 리스트에 0 추가

a.append(line) # 전체 리스트에 안쪽 리스트를 추가

 

print(a)

::  [[0, 0], [0, 0], [0, 0]]

 

## for 반복문으로 2차원 리스트 만들기


a = [[0*j for j in range(2)] for i in range(3)]

print(a)

# [[0, 0], [0, 0], [0, 0]]

 

b = [[0] * 2 for i in range(3)]

print(b)

 

# [[0, 0], [0, 0], [0, 0]]

 

## 리스트 표현식으로 2차원 리스트 만들기


a = [3, 1, 3, 2, 5] # 가로 크기를 저장한 리스트

b = [] # 빈 리스트 생성

 

for i in a: # 가로 크기를 저장한 리스트로 반복

line = [] # 안쪽 리스트로 사용할 빈 리스트 생성

for j in range(i): # 리스트 a에 저장된 가로 크기만큼 반복

line.append(0)

b.append(line) # 리스트 b에 안쪽 리스트를 추가

 

print(b)

# [[0, 0, 0], [0], [0, 0, 0], [0, 0], [0, 0, 0, 0, 0]]

 

## for 문을 이용해 빈 리스트에 톱니형 리스트 만들기


c = [[0] * i for i in [3, 1, 3, 2, 5]]

print(c)

#[[0, 0, 0], [0], [0, 0, 0], [0, 0], [0, 0, 0, 0, 0]]

 

## 리스트 표현식을 이용한 톱니형 리스트 만들기


## 2차원 리스트의 할당 과 복사

 

a = [[10, 20], [30, 40]]

b = a

b[0][0] = 500

print(a)

:: [[500, 20], [30, 40]]

print(b)

:: [[500, 20], [30, 40]]



a = [[10, 20], [30, 40]]

b = a.copy()

b[0][0] = 500

print(a)

:: [[500, 20], [30, 40]]

print(b)

:: [[500, 20], [30, 40]]

 

a = [[10, 20], [30, 40]]

import copy # copy 모듈을 가져옴

b = copy.deepcopy(a) # copy.deepcopy 함수를 사용하여 깊은 복사

b[0][0] = 500

 

print(a)

:: [[10, 20], [30, 40]]

print(b)

:: [[500, 20], [30, 40]]




## 1번 코드는 할당 // 2번 코드는 복사 이다.

## 3번 deepcopy 함수를 통한 복사 이다.

 

## 이전 copy 메서드를 이용해 변수 2개, 리스트 2개를 생성할 수 있었으나

## 2차원 이상의 다차원의 리스트는 copy 메서드를 이용해도 2개의 리스트를 생성할 수 없다

## 따라서 1차원 리스트의 copy 함수의 역할을 수행하게 하기 위해선 copy 모듈의 deepcopy 함수를 사용해야한다(tuple도 동일)

728x90
반응형