[Python] 2차원 리스트 생성 및 입력 받기
1. 2차원 리스트의 구조
2차원 리스트는 1차원 리스트를 묶어놓은 구조로, 많이 사용되는 자료구조 중 하나이다.
2차원 리스트의 선언은 세로길이(행의 개수), 가로길이(열의 개수)를 필요로 한다.
ex) 2행 4열의 2차원 리스트
a = [ [0, 1, 2, 3], [4, 5, 6, 7] ]
0 | 1 | 2 | 3 |
4 | 5 | 6 | 7 |
이제 리스트를 선언하고 초기화 하는 방법에 대해 알아보자.
2. 리스트 초기화
arr = [0, 0, 0, 0, 0]
arr = [0] * 5
arr = [i for i in range(2, 9) if i % 2 == 0]
# [2, 4, 6, 8]
brr = [[1, 2, 3], [1, 2, 3], [1, 2, 3]]
brr = [[1, 2, 3]] * 3
brr = [[1, 2, 3] for i in range(3)]
brr = [[i,j] for i in range(3) for j in range(2)]
# [[0, 0], [0, 1], [1, 0], [1, 1], [2, 0], [2, 1]]
1차원 리스트 arr은 1~3줄과 같은 여러 가지 방법으로 초기화 및 선언이 가능하다.
특히 3번째 줄과 같은 경우에는 python에서 리스트를 생성할 때 편리하게 사용할 수 있는
'List Comprehension'이라는 방법을 사용하였다.
** List Comprehension이란, [출력표현식 for 요소 in 입력Sequence [if 조건식]]과 같은 문법을 가지며 '입력 sequence 안의 요소 중 if 조건식에 해당하는 출력표현식'을 리스트 형태로 빌드하는 것이라고 해석할 수 있다.
더욱 자세한 내용은 아래의 링크를 참조하자.
2차원 리스트 brr 또한 5~8줄과 같은 여러 가지 방법으로 초기화 및 선언이 가능하다.
8번째 줄의 경우에도 List Comprehension을 사용하였다. 0부터 2까지의 i와 0부터 1까지의 j로 만들 수 있는 [i, j]를 요소로 가지는 리스트를 brr로 빌드한 것이다.
이처럼 직접 타이핑하여 2차원 리스트를 선언 및 초기화하는 방법이 있다면,
데이터를 입력받아 2차원 리스트를 생성할 수도 있다.
3. 2차원 리스트 입력 받기
3 4
0 1 0 0
0 0 0 0
0 0 1 0
다음과 같이, 첫째 줄에 2차원 리스트의 행과 열이 주어지고, 두번째 줄부터 행렬의 데이터가 주어질 경우,
n, m = map(int, input().split())
#1
mylist = [0 for _ in range(n)]
for i in range(n)
mylist[i] = list(map(int, input().split()))
#2
mylist = []
for i in range(n):
mylist.append(list(map(int, input().split())))
#3
mylist = [list(map(int, input().split())) for _ in range(n)]
# 결과
print(mylist)
[[0, 1, 0, 0], [0, 0, 0, 0], [0, 0, 1, 0]]
먼저 input()함수로 입력받은 값을 split()함수로 분리하고, map함수를 이용하여 int 자료형으로 변환한 후 변수 n과 m에 담는다. ( n=3, m=4 ) 그 다음, 3가지 방법으로 2차원 리스트를 만들 수 있다.
#1
1차원 리스트인 mylist에 행의 개수(n)만큼의 0으로 채운다.
그다음 n번의 for문을 통해 한 줄씩 input값으로 받아서 mylist에 채워져있는 0을 입력받은 값으로 대체한다.
이 때도 map함수를 통해 int형으로 변환해준다.
#2
비어있는 1차원 리스트인 mylist를 선언하고,
n번의 for문을 통해 한 줄씩 입력받은 값을 mylist에 추가하는 방식이다.
append를 통해 한 줄씩 순서대로 리스트의 원소로 추가한다.
#3
위에 나온 선언, 초기화, 입력받고, 원소로 추가하는 방법을 한 줄로 축약한 것이다.
앞서 나왔던 list comprehension을 통해 mylist의 원소가 될 형식을 list(map(int, input().split())) 로 지정해주고, n번만큼 시행한다.
위 방법 중 어느 방법을 쓰더라도, 아래와 같이 mylist가 생성된다.
'Python' 카테고리의 다른 글
[Python] 정렬 알고리즘 - 선택 정렬, 삽입 정렬, 퀵 정렬, 계수 정렬 (0) | 2021.06.30 |
---|---|
[Python] List to String, 리스트를 문자열로 변경하기 (0) | 2021.06.23 |
[Python] List Comprehension (0) | 2021.06.08 |
[Python] 리스트 항목 정렬하기 sorted, sort, reverse (0) | 2021.06.07 |
[Python] 소수점 자리수의 출력 - round() vs format() (0) | 2021.06.07 |