파이썬 이중 for문으로 2D 리스트 만들기
2D 리스트란 리스트 안에 리스트가 들어가 있는 상태의 리스트를 의미합니다. 예를 들면 아래와 같습니다.
[
[0, 1, 2, 3, 4]
[5, 6, 7, 8, 9]
[10, 11, 12, 13, 14]
[15, 16, 17, 18, 19]
[20, 21, 22, 23, 24]
]
위와 같은 2D리스트를 우선 이중 for문으로 만들어 보겠습니다.
my_list = []
for row in range(0,25,5):
inner_list=[]
for column in range(row, row + 5):
inner_list.append(column)
my_list.append(inner_list)
우선 한 행을 5단위로 루프를 돌리기 위해서 range에 0부터 25사이를 5 단위로 올라가면서 루프를 돌리도록 했습니다.
매 루프마다 inner_list라는 리스트를 생성하고 이 리스트에 행의 숫자와 행의 숫자에 5를 더한 만큼의 수 사이에서 루프를 돌도록 하고 있습니다. 그리고 그 수를 inner_list에 넣고 루프가 끝나면 inner_list를 my_list에 넣고 있습니다.
my_list를 프린트 하면 아래와 같이 2D리스트가 완성된 것을 확인하고 있습니다.
파이썬 리스트 컴프리핸션에서 이중 for문 사용하기
같은 작업을 리스트 컴프리핸션을 사용해서 해보겠습니다.
my_list = [[column for column in range(row, row+5)]for row in range(0, 25, 5)]
훨씬 깔끔한 코드로 작성이 가능합니다.
우선 my_list에 리스트를 할당하고 있습니다. 그런데 그 리스트 안에는 for문이 들어 있습니다.
my_list = [ ? for row in range(0, 25, 5)] #[ 추가하고 싶은 값 -- 반복문 ]
위에서 본 것처럼 0부터 25 사이를 5 단위로 올라가면서 루프를 도는 구문입니다. 만약 ?(물음표) 부분에 row가 들어간다면 my_list 안에는 0, 5, 10, 15, 20이 할당될 것입니다.
my_list = [ row for row in range(0, 25, 5)]
하지만 여기서는 5번 루프를 돌면서 아래와 같은 리스트를 my_list 안에 넣도록 하고 있습니다.
[column for column in range(row, row+5)]
첫 번째 루프의 row의 값(0, 5, 10, 15, 20)을 활용해서 루프를 돌리고 그 값을 리스트에 저장하고 있습니다.
row가 0일 때는 0, 1, 2, 3, 4가
row가 20일 때는 20, 21, 22, 23, 24가
리스트에 담기게 됩니다.
각 리스트들은 역시 my_list에 저장이 됩니다.
프린트를 하면 아래외 같은 결과가 됩니다.
같이 읽으면 좋은 글