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

 

프로그래머스 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
복사했습니다!