본문 바로가기
IT/Python Basic

[python] 리스트 컴프리헨션 - n차원 리스트

by Echinacea 2025. 2. 20.
반응형

 

 

1️⃣ 2차원 리스트 평탄화하기

2차원 리스트에서 모든 요소를 하나의 리스트로 변환하는 다양한 방법을 소개합니다.

 

🔹 개념 설명

  • 리스트 컴프리헨션을 사용하면 중첩된 for 루프를 간결하게 표현할 수 있습니다.
  • **평탄화(Flattening)**란 다차원 리스트를 1차원 리스트로 변환하는 것을 의미합니다.

 

🔹 입력 예시

matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

 

 

✅ 리스트 컴프리헨션 사용

flattened = [num for row in matrix for num in row]

 

✅ 리스트 컴프리헨션 사용 (홀수만 포함)

flattened_odd = [num for row in matrix for num in row if num % 2 == 1]

 

✅ 리스트 컴프리헨션 사용 (각 행의 첫 번째 요소만 선택)

first_column = [row[0] for row in matrix]

 

✅ 리스트 컴프리헨션 사용하지 않음

flattened = []
for row in matrix:
    for num in row:
        flattened.append(num)

 

🔹 출력 예시

[1, 2, 3, 4, 5, 6, 7, 8, 9]

 

 

2️⃣ 3차원 리스트 평탄화하기

 

🔹 개념 설명

  • 3차원 리스트는 2차원 리스트의 집합입니다.
  • 여러 개의 중첩된 for 루프를 리스트 컴프리헨션으로 표현할 수 있습니다.

 

🔹 입력 예시

cube = [[[1, 2], [3, 4]], [[5, 6], [7, 8]]]

 

✅ 리스트 컴프리헨션 사용

flattened_3d = [num for layer in cube for row in layer for num in row]

 

✅ 리스트 컴프리헨션 사용 (짝수만 포함)

flattened_3d_even = [num for layer in cube for row in layer for num in row if num % 2 == 0]

 

✅ 리스트 컴프리헨션 사용 (각 레이어의 첫 번째 행만 선택)

first_rows = [row for layer in cube for row in layer[:1]]

 

🔹 출력 예시

[1, 2, 3, 4, 5, 6, 7, 8]

 

 

3️⃣ 다차원 리스트에서 특정 조건 필터링

 

🔹 개념 설명

  • **필터링(Filter)**을 적용하여 특정 조건을 만족하는 요소만 선택할 수 있습니다.
  • 조건을 추가하면 더 정교한 데이터 추출이 가능합니다.

 

🔹 입력 예시

matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

 

✅ 리스트 컴프리헨션 사용 (짝수만 포함)

even_numbers = [num for row in matrix for num in row if num % 2 == 0]

 

✅ 리스트 컴프리헨션 사용 (3의 배수만 포함)

multiples_of_3 = [num for row in matrix for num in row if num % 3 == 0]

 

✅ 리스트 컴프리헨션 사용 (각 행에서 최대값만 선택)

max_values = [max(row) for row in matrix]

 

🔹 출력 예시

[2, 4, 6, 8]

 

 

4️⃣ 다차원 리스트 요소의 위치 포함

 

🔹 개념 설명

  • 각 요소의 위치 정보가 필요할 때, 인덱스를 함께 저장할 수 있습니다.
  • 행과 열의 인덱스를 함께 출력하면, 위치 기반 연산이 가능합니다.

 

🔹 입력 예시

matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

 

✅ 리스트 컴프리헨션 사용 (값과 인덱스 포함)

indexed_matrix = [(matrix[i][j], i, j) for i in range(len(matrix)) for j in range(len(matrix[i]))]

 

✅ 리스트 컴프리헨션 사용 (짝수만 포함)

even_indexed_matrix = [(matrix[i][j], i, j) for i in range(len(matrix)) for j in range(len(matrix[i])) if matrix[i][j] % 2 == 0]

 

✅ 리스트 컴프리헨션 사용 (대각선 요소만 선택)

diagonal_elements = [(matrix[i][i], i, i) for i in range(len(matrix))]

 

🔹 출력 예시

[(1, 0, 0), (2, 0, 1), (3, 0, 2), (4, 1, 0), (5, 1, 1), (6, 1, 2), (7, 2, 0), (8, 2, 1), (9, 2, 2)]

 

 

🎯 추가 개념 (코딩테스트 대비)

 

🔹 2차원 리스트 뒤집기 (전치행렬)

transposed = [[row[i] for row in matrix] for i in range(len(matrix[0]))]

 

🔹 특정 행의 평균 계산하기

row_averages = [sum(row) / len(row) for row in matrix]

 

🔹 2차원 리스트에서 특정 값 찾기

found = [(i, j) for i in range(len(matrix)) for j in range(len(matrix[i])) if matrix[i][j] == 5]

 

🔹 2차원 리스트에서 최대값과 위치 찾기

max_value = max(max(row) for row in matrix)
max_positions = [(i, row.index(max(row))) for i, row in enumerate(matrix) if max(row) == max_value]

 

반응형

댓글