728x90
반응형
23. 2차원 리스트 사용하기
23.1 2차원 리스트를 만들고 요소에 접근
>>> a = [[10, 20], [30, 40], [50, 60]]
>>> print(a)
[[10, 20], [30, 40], [50, 60]]
>>> print(a[0][0])
>>> print(a[0][1])
10
20
>>> for i in a:
>>> print(i)
[10, 20]
[30, 40]
[50, 60]
# 톱니형 리스트
>>> a = [
>>> [10, 20],
>>> [500, 600, 700],
>>> [9],
>>> [30, 40],
>>> [8],
>>> [800, 900, 1000]
>>> ]
>>> print(a)
[[10, 20], [500, 600, 700], [9], [30, 40], [8], [800, 900, 1000]]
>>> b = []
>>> b.append([])
>>> b[0].append(10)
>>> b[0].append(20)
>>> b.append([])
>>> b[1].append(500)
>>> b[1].append(600)
>>> b[1].append(700)
>>> print(b)
[[10, 20], [500, 600, 700]]
# 2차원 튜플
>>> a = ((10, 20), (30, 40), (50, 60)) # 튜플 안에 튜플
>>> b = ([10, 20], [30, 40], [50, 60]) # 튜플 안에 리스트
>>> c = [(10, 20), (30, 40), (50, 60)] # 리스트 안에 튜플
>>> a[0][0] = 500
# TypeError: 안쪽 튜플은 변경할 수 없음
>>> a[0] = (500, 600)
# TypeError: 바깥쪽 튜플은 변경할 수 없음
>>> b[0][0] = 500
# 안쪽 리스트는 변경할 수 있음
>>> b[0] = (500, 600)
# TypeError: 바깥쪽 튜플은 변경할 수 없음
>>> c[0][0] = 500
# TypeError: 안쪽 튜플은 변경할 수 없음
>>> c[0] = (500, 600)
# 바깥쪽 리스트는 변경할 수 있음
# 가독성있게 출력
from pprint import pprint
# indent : 들여쓰기 칸수, width : 가로 폭
>>> pprint(a, indent=2, width=20)
( (10, 20),
(30, 40),
(50, 60))
23.2 반복문으로 2차원 리스트의 요소 모두 출력
# 반복문 한 번
a = [[10, 20], [30, 40], [50, 60]]
for x, y in a:
print(x, y)
print()
# 반복문 두 번
for i in a:
for j in i:
print(j, end=' ')
print()
print()
# for와 range 사용
for i in range(len(a)):
for j in range(len(a[i])):
print(a[i][j], end=' ')
print()
print()
# while 한 번
i = 0
while i < len(a):
x, y = a[i]
print(x, y)
i += 1
print()
# while 두 번
i = 0
while i < len(a):
j = 0
while j < len(a[i]):
print(a[i][j], end=' ')
j += 1
print()
i += 1
== 결과 동일 ========================
10 20
30 40
50 60
23.3 반복문으로 리스트 만들기
a = []
for i in range(10):
a.append(0)
print(a)
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
# for문: 2차원
a = []
for i in range(3):
another = list()
for j in range(2):
another.append(0)
a.append(another)
print(a)
[[0, 0], [0, 0], [0, 0]]
# list 표현식 : 2차원
a = [[0 for i in range(2)] for j in range(3)]
print(a)
[[0, 0], [0, 0], [0, 0]]
# 톱니형
a = [3, 1, 3, 2, 5]
b = []
for i in a:
another = []
for j in range(i):
another.append(0)
b.append(another)
print(b)
[[0, 0, 0], [0], [0, 0, 0], [0, 0], [0, 0, 0, 0, 0]]
# sorted로 2차원 정렬
students = [
['jonh', 'C', 19],
['maria', 'A', 25],
['cheryl', 'B', 7]
]
# 안쪽 리스트의 인덱스 1을 기준으로 정렬
print(sorted(students, key=lambda student: student[1]))
[['maria', 'A', 25], ['cheryl', 'B', 7], ['jonh', 'C', 19]]
# 안쪽 리스트의 인덱스 2를 기준으로 정렬
print(sorted(students, key=lambda student: student[2]))
[['cheryl', 'B', 7], ['jonh', 'C', 19], ['maria', 'A', 25]]
23.4 2차원 리스트의 할당과 복사
- b = copy.deepcopy(a) 로 해야 복사한 객체에서만 변경
# b = a : 모두 반영
a = [[10, 20], [30, 40]]
b = a
b[0][0] = 500
print(a)
print(b)
[[500, 20], [30, 40]]
[[500, 20], [30, 40]]
# b = a.copy() : 모두 반영
c = [[10, 20], [30, 40]]
d = c.copy()
d[0][0] = 500
print(c)
print(d)
[[500, 20], [30, 40]]
[[500, 20], [30, 40]]
# b = copy.deepcopy(a)
c = [[10, 20], [30, 40]]
d = copy.deepcopy(c)
d[0][0] = 500
print(c)
[[10, 20], [30, 40]]
[[500, 20], [30, 40]]
23.6 연습문제 : 3차원 리스트 만들기
a = [[[0 for i in range(3)] for j in range(3)] for k in range(2)]
print(a)
[[[0, 0, 0], [0, 0, 0], [0, 0, 0]], [[0, 0, 0], [0, 0, 0], [0, 0, 0]]]
23.7 심사문제 : 지뢰찾기
표준 입력으로 2차원 리스트의 가로와 세로가 입력되고 그 다음 줄부터 리스트의 요소로 들어갈 문자기 입력된다.
이때 2차원 리스트 안에서 *는 지뢰이고 .는 지뢰가 아니다.
지뢰가 아닌 요소에는 인접한 지뢰의 개수를 출력하자.
(여러 줄을 입력받으려면 아래 구문을 활용)
matrix = []
for i in range(row)"
matrix.append(list(input()))
표준입력
3 3 (입력)
.*.
*.*
***
표준출력
2*2
*6*
***
# 풀이
matrix = []
x, y = map(int, input().split())
# matrix 확인
for i in range(y):
matrix.append(list(input()))
result = []
for i in range(len(matrix)):
result2 = []
for j in range(len(matrix[i])):
if matrix[i][j] == '*':
sumCount = '*'
else:
sumCount = checkCount(i, j)
result2.append(sumCount)
result.append(result2)
def checkCount(a, b):
count = 0;
# print('matrix[', a, ']', '[', b, ']')
for i in range(a - 1, a + 2):
for j in range(b - 1, b + 2):
if a == i and b == j:
continue
elif 0 <= i <= len(matrix) - 1 and 0 <= j <= len(matrix) - 1:
if matrix[i][j] == '*':
count += 1
# print('(', i, ')', '(', j, ')')
print()
return count;
def toString(value):
for i in range(len(value)):
for j in range(len(value[i])):
print(str(value[i][j]), end='')
print()
print(line)
print('결과출력=====================' )
toString(result)
728x90
반응형
'Language > Python' 카테고리의 다른 글
[코딩도장]25.딕셔너리응용 (0) | 2022.03.18 |
---|---|
[코딩도장]24.문자열 응용 (0) | 2022.03.16 |
[코딩도장]22.리스트, 튜플 응용 (0) | 2022.03.14 |
[코딩도장]20.FizzBuzz문제 (0) | 2022.03.14 |
[코딩도장]19.계단식 별 출력 (0) | 2022.03.14 |