2차원 리스트 인덱스 접근
a = [[10, 20], [30, 40], [50, 60]]
for i in range(len(a)): # 세로 크기
for j in range(len(a[i])): # 가로 크기
print(a[i][j], end=' ')
print()
더보기
10 20
30 40
50 60
30 40
50 60
프로그래머스 lev1 행렬의 덧셈
작성 코드
def solution(arr1, arr2):
answer = []
for i in range(len(arr1)):
tmp = []
for j in range(len(arr1[i])):
tmp.append(arr1[i][j] + arr2[i][j])
answer.append(tmp)
return answer
TypeError: insert expected 2 arguments, got 1
→ insert()의 경우에는 인덱스도 적어줘야 함
다른 풀이
1. list comprehension
def solution(arr1, arr2):
answer = [[arr1[i][j] + arr2[i][j] for j in range(len(arr1[i]))] for i in range(len(arr1))]
return answer
2. zip
zip(컬렉션1, 컬렉션2, …)
- 여러 개의 컬렉션을 합쳐 하나로 만든다.
- 두 리스트의 대응되는 요소끼리 짝을 지어 튜플의 리스트를 생성
- 두 개의 리스트를 병렬로 순회할 때 편리
dayofweek = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]
food = ["Pasta", "Steak", "Cheese", "Toast"]
menu = zip(dayofweek, food) # 두 리스트를 병합하여 새 리스트 생성
for d, f in menu:
print("The menu of %s : %s" % (d, f))
더보기
The menu of Mon : Pasta
The menu of Tue : Steak
The menu of Wed : Cheese
The menu of Thu : Toast
- 두 리스트의 길이가 달라도 상관 X → 짧은 쪽의 길이에 맞추어짐
- 생성되는 튜플의 순서는 원본 리스트의 순서와 같음
- zip 함수가 생성하는 튜플을 dict 함수로 넘겨 변환하면?
- 앞 요소를 키로 하고 뒤 요소를 값으로 하는 사전 생성
def solution(arr1, arr2):
answer = [[a + b for a, b in zip(lst1, lst2)] for lst1, lst2 in zip(arr1, arr2)]
return answer
입력값이 [[1, 2], [2, 3]], [[3, 4], [5, 6]]
기댓값 [[4, 6], [7, 9]]
1. for lst1, lst2 in zip(arr1, arr2)
- zip(arr1, arr2) = ([1, 2], [3, 4]), ([2, 3], [5, 6])
- lst1 = [1, 2], lst2 = [3, 4]
2. for a, b in zip(lst1, lst2)
- zip(lst1, lst2) = ([1, 3], [2, 4])
- a = 1, b = 3
def solution(arr1, arr2):
return [list(map(sum, zip(*x))) for x in zip(arr1, arr2)]
1. for x in zip(arr1, arr2)
- x = ([1, 2], [3, 4])
2. zip(*x)
- *로 언패킹하면 리스트 형태로 반환
- *x = [1, 2] [3, 4]
- *는 위치에 따라 패킹을 의미하기도, 언패킹을 의미하기도 함
'프로그래밍 > Python' 카테고리의 다른 글
[Python] sort, join (0) | 2022.03.26 |
---|---|
[Python] module (0) | 2022.03.23 |
[Python] 문자열 (0) | 2022.03.21 |
[Python] 리스트 (0) | 2022.03.19 |
[Python] map, input, strip, split (0) | 2022.03.18 |