Python에서 2차원 리스트의 행과 열을 조작하는 실전 가이드

Python은 강력하고 유연한 프로그래밍 언어로, 특히 데이터 조작에 있어 많은 기능을 제공합니다. 본 기사에서는 Python을 사용하여 2차원 리스트(리스트의 리스트)를 효과적으로 조작하는 방법을 자세히 설명합니다. 기본적인 조작 방법부터 시작하여, 행과 열의 추가・삭제, 행렬의 교체, 특정 행이나 열의 추출과 같은 실전 기술까지 다룹니다. 이를 통해 Python을 사용한 데이터 조작 스킬을 향상시키고, 실무에 도움이 되는 지식을 습득할 수 있을 것입니다.

목차

행의 추가 및 삭제 방법

2차원 리스트에 행을 추가하거나 삭제하는 방법에 대해 설명합니다. 이를 통해 데이터 구조를 유연하게 조작하는 스킬을 습득할 수 있습니다.

행의 추가

2차원 리스트에 새로운 행을 추가하려면, 리스트의 append() 메서드를 사용합니다. 예를 들어, 새로운 행 [10, 11, 12] 를 추가하려면 다음과 같이 합니다.

# 새로운 행을 추가
new_row = [10, 11, 12]
matrix.append(new_row)
print(matrix)
# 출력: [[1, 2, 3], [4, 10, 6], [7, 8, 9], [10, 11, 12]]

행의 삭제

특정 행을 삭제하려면, del 키워드 또는 pop() 메서드를 사용합니다. 예를 들어, 두 번째 행(인덱스 1)을 삭제하려면 다음과 같이 합니다.

# 두 번째 행을 삭제
del matrix[1]
print(matrix)
# 출력: [[1, 2, 3], [7, 8, 9], [10, 11, 12]]

또는, pop() 메서드를 사용하여 행을 삭제하고, 그 행을 반환받을 수도 있습니다.

# 두 번째 행을 삭제하고 반환
removed_row = matrix.pop(1)
print(matrix)
print(removed_row)
# 출력:
# [[1, 2, 3], [7, 8, 9], [10, 11, 12]]
# [4, 10, 6]

여러 행의 추가 및 삭제

여러 개의 행을 추가하려면, extend() 메서드를 사용합니다.

# 여러 행을 추가
new_rows = [[13, 14, 15], [16, 17, 18]]
matrix.extend(new_rows)
print(matrix)
# 출력: [[1, 2, 3], [7, 8, 9], [10, 11, 12], [13, 14, 15], [16, 17, 18]]

여러 개의 행을 삭제하려면, 리스트 내포 또는 반복문을 사용하여 특정 조건에 맞는 행을 삭제합니다.

# 짝수 번째 행을 삭제
matrix = [row for i, row in enumerate(matrix) if i % 2 == 0]
print(matrix)
# 출력: [[1, 2, 3], [10, 11, 12], [16, 17, 18]]

이상이 Python에서 2차원 리스트에 행을 추가・삭제하는 방법입니다. 다음으로, 열의 추가 및 삭제 방법에 대해 설명합니다.

열의 추가 및 삭제 방법

2차원 리스트에 열을 추가하거나 삭제하는 방법에 대해 설명합니다. 이를 통해 데이터의 구조를 더욱 유연하게 조작할 수 있게 됩니다.

열의 추가

2차원 리스트에 새로운 열을 추가하려면, 각 행에 대해 새로운 요소를 추가합니다. 예를 들어, 각 행에 새로운 요소 10을 추가하려면 다음과 같이 합니다.

# 각 행에 새로운 열을 추가
for row in matrix:
    row.append(10)
print(matrix)
# 출력: [[1, 2, 3, 10], [10, 11, 12, 10], [16, 17, 18, 10]]

특정 위치에 열을 삽입

특정 위치에 열을 삽입하려면, insert() 메서드를 사용하여 각 행에 요소를 삽입합니다. 예를 들어, 두 번째 위치(인덱스 1)에 새로운 열 5를 삽입하려면 다음과 같이 합니다.

# 각 행의 두 번째 위치에 새로운 열을 삽입
for row in matrix:
    row.insert(1, 5)
print(matrix)
# 출력: [[1, 5, 2, 3, 10], [10, 5, 11, 12, 10], [16, 5, 17, 18, 10]]

열의 삭제

특정 열을 삭제하려면, 각 행에서 해당 열의 요소를 삭제합니다. 예를 들어, 두 번째 열(인덱스 1)을 삭제하려면 다음과 같이 합니다.

# 각 행의 두 번째 열을 삭제
for row in matrix:
    del row[1]
print(matrix)
# 출력: [[1, 2, 3, 10], [10, 11, 12, 10], [16, 17, 18, 10]]

특정 조건에 따라 열을 삭제

특정 조건에 기반하여 열을 삭제하려면, 반복문과 조건문을 조합합니다. 예를 들어, 각 행의 마지막 열을 삭제하려면 다음과 같이 합니다.

# 각 행의 마지막 열을 삭제
for row in matrix:
    row.pop()
print(matrix)
# 출력: [[1, 2, 3], [10, 11, 12], [16, 17, 18]]

이상이 Python에서 2차원 리스트에 열을 추가・삭제하는 방법입니다. 다음으로, 행과 열을 교체하는 방법에 대해 설명합니다.

행과 열의 교체

Python에서 2차원 리스트의 행과 열을 교체하는 방법을 설명합니다. 행렬의 전치라고도 불리는 이 작업은 데이터의 시각을 변경하는 데 매우 유용합니다.

행과 열을 교체하는 방법

Python에서 행과 열을 교체하는 가장 간단한 방법은 리스트 내포를 사용하는 것입니다. 아래에 그 방법을 보여드립니다.

# 원본 2차원 리스트
matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]

# 행과 열을 교체
transposed_matrix = [[row[i] for row in matrix] for i in range(len(matrix[0]))]
print(transposed_matrix)
# 출력: [[1, 4, 7], [2, 5, 8], [3, 6, 9]]

이 방법은 리스트 내포를 사용하여 새로운 리스트를 생성하고, 원본 리스트의 각 열을 새로운 리스트의 행으로 구성합니다.

NumPy를 사용하는 방법

더 효율적인 방법으로 NumPy 라이브러리를 사용할 수도 있습니다. NumPy를 사용하면, 대규모 데이터셋에 대해서도 쉽게 행과 열을 교체할 수 있습니다.

import numpy as np

# 원본 2차원 리스트
matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]

# NumPy 배열로 변환 후 전치
np_matrix = np.array(matrix)
transposed_matrix = np_matrix.T
print(transposed_matrix)
# 출력:
# [[1 4 7]
#  [2 5 8]
#  [3 6 9]]

수동으로 행과 열을 교체하는 방법

리스트 내포나 NumPy를 사용하지 않는 경우, 새로운 리스트를 수동으로 생성하여 행과 열을 교체할 수도 있습니다.

# 행과 열을 교체
transposed_matrix = []
for i in range(len(matrix[0])):
    new_row = []
    for row in matrix:
        new_row.append(row[i])
    transposed_matrix.append(new_row)
print(transposed_matrix)
# 출력: [[1, 4, 7], [2, 5, 8], [3, 6, 9]]

이상이 Python에서 2차원 리스트의 행과 열을 교체하는 방법입니다. 다음으로, 특정 행이나 열을 추출하는 방법에 대해 설명합니다.

특정 행이나 열의 추출

Python에서 2차원 리스트로부터 특정 행이나 열을 추출하는 방법을 설명합니다. 이를 통해 필요한 데이터만 효율적으로 가져올 수 있습니다.

특정 행의 추출

특정 행을 추출하려면 해당 행의 인덱스를 지정합니다. 예를 들어, 두 번째 행(인덱스 1)을 추출하려면 다음과 같이 합니다.

# 원본 2차원 리스트
matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]

# 두 번째 행을 추출
second_row = matrix[1]
print(second_row)
# 출력: [4, 5, 6]

특정 열의 추출

특정 열을 추출하려면, 각 행에서 해당 열의 요소를 가져옵니다. 예를 들어, 두 번째 열(인덱스 1)을 추출하려면 다음과 같이 합니다.

# 두 번째 열을 추출
second_column = [row[1] for row in matrix]
print(second_column)
# 출력: [2, 5, 8]

여러 행이나 열의 추출

여러 행이나 열을 추출하려면 슬라이스를 사용합니다. 예를 들어, 처음 두 개의 행을 추출하려면 다음과 같이 합니다.

# 처음 두 개의 행을 추출
first_two_rows = matrix[:2]
print(first_two_rows)
# 출력: [[1, 2, 3], [4, 5, 6]]

유사하게, 특정 범위의 열을 추출할 때도 슬라이스를 사용합니다. 예를 들어, 처음 두 개의 열을 추출하려면 다음과 같이 합니다.

# 처음 두 개의 열을 추출
first_two_columns = [row[:2] for row in matrix]
print(first_two_columns)
# 출력: [[1, 2], [4, 5], [7, 8]]

조건에 따라 행이나 열을 추출

조건에 따라 행이나 열을 추출할 수도 있습니다. 예를 들어, 행에 특정 값이 포함되어 있는 경우 그 행을 추출하려면 다음과 같이 합니다.

# 값 6이 포함된 행을 추출
rows_with_six = [row for row in matrix if 6 in row]
print(rows_with_six)
# 출력: [[4, 5, 6]]

또한, 열에 특정 값이 포함되어 있는 경우 그 열을 추출할 수도 있습니다.

# 값 8이 포함된 열을 추출
columns_with_eight = [row[i] for row in matrix for i in range(len(row)) if row[i] == 8]
print(columns_with_eight)
# 출력: [8]

이상이 Python에서 2차원 리스트로부터 특정 행이나 열을 추출하는 방법입니다. 다음으로, 2차원 리스트의 응용 예에 대해 설명합니다.

2차원 리스트의 응용 예

여기서는, Python의 2차원 리스트를 사용한 실제 응용 예를 몇 가지 소개합니다. 이를 통해 2차원 리스트의 실용적인 활용 방법을 이해할 수 있습니다.

응용 예1: 성적 관리 시스템

학생의 성적을 관리하는 시스템에서는, 2차원 리스트를 사용하여 학생별 과목별 성적을 관리할 수 있습니다.

# 학생의 성적 리스트
grades = [
    ["Alice", 85, 90, 78],
    ["Bob", 92, 88, 79],
    ["Charlie", 88, 70, 95]
]

# 각 학생의 평균 성적을 계산
for student in grades:
    name = student[0]
    scores = student[1:]
    average = sum(scores) / len(scores)
    print(f"{name}의 평균 성적: {average:.2f}")

# 출력:
# Alice의 평균 성적: 84.33
# Bob의 평균 성적: 86.33
# Charlie의 평균 성적: 84.33

응용 예2: 이미지의 픽셀 조작

이미지 처리에서, 이미지의 픽셀 데이터를 2차원 리스트로 다룰 수 있습니다. 다음은 이미지의 각 픽셀의 색상을 반전시키는 예제입니다.

# 3x3 픽셀 데이터 (각 요소는 RGB 튜플)
image = [
    [(255, 0, 0), (0, 255, 0), (0, 0, 255)],
    [(255, 255, 0), (0, 255, 255), (255, 0, 255)],
    [(0, 0, 0), (255, 255, 255), (128, 128, 128)]
]

# 색상을 반전
inverted_image = [[(255-r, 255-g, 255-b) for (r, g, b) in row] for row in image]
print(inverted_image)

# 출력:
# [[(0, 255, 255), (255, 0, 255), (255, 255, 0)],
#  [(0, 0, 255), (255, 0, 0), (0, 255, 0)],
#  [(255, 255, 255), (0, 0, 0), (127, 127, 127)]]

응용 예3: 행렬 계산

2차원 리스트는 행렬 계산에도 사용할 수 있습니다. 다음은 두 개의 행렬을 더하는 예제입니다.

# 두 개의 행렬
matrix1 = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]

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

# 행렬의 덧셈
result_matrix = [[matrix1[i][j] + matrix2[i][j] for j in range(len(matrix1[0]))] for i in range(len(matrix1))]
print(result_matrix)

# 출력: [[10, 10, 10], [10, 10, 10], [10, 10, 10]]

응용 예4: 데이터 필터링

특정 조건에 맞는 데이터를 추출하기 위한 필터링에 2차원 리스트를 사용하는 예제입니다.

# 직원 데이터 (이름, 나이, 부서)
employees = [
    ["Alice", 30, "HR"],
    ["Bob", 25, "Engineering"],
    ["Charlie", 35, "Marketing"]
]

# 나이가 30 이상인 직원 추출
senior_employees = [employee for employee in employees if employee[1] >= 30]
print(senior_employees)

# 출력: [['Alice', 30, 'HR'], ['Charlie', 35, 'Marketing']]

이러한 응용 예를 통해 2차원 리스트의 다양한 활용 방법을 이해할 수 있을 것입니다. 다음으로, 이해를 돕기 위한 연습 문제를 제공합니다.

연습 문제

여기에서는 2차원 리스트의 조작에 대한 이해를 높이기 위한 연습 문제를 제공합니다. 각 문제에 도전하여 Python으로 코드를 구현해 보세요.

연습 문제1: 행의 추가 및 삭제

아래의 2차원 리스트에 대해, 새로운 행 [10, 11, 12]를 추가한 후 두 번째 행을 삭제하는 코드를 작성하세요.

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

# 새로운 행을 추가
# 두 번째 행을 삭제

print(matrix)
# 예상 출력: [[1, 2, 3], [7, 8, 9], [10, 11, 12]]

연습 문제2: 열의 추가 및 삭제

아래의 2차원 리스트에 대해, 각 행에 새로운 열 10을 추가한 후 세 번째 열을 삭제하는 코드를 작성하세요.

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

# 각 행에 새로운 열을 추가
# 세 번째 열을 삭제

print(matrix)
# 예상 출력: [[1, 2, 10], [4, 5, 10], [7, 8, 10]]

연습 문제3: 행과 열의 교체

아래의 2차원 리스트에 대해, 행과 열을 교체하는 코드를 작성하세요.

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

# 행과 열을 교체

print(matrix)
# 예상 출력: [[1, 4, 7], [2, 5, 8], [3, 6, 9]]

연습 문제4: 특정 행이나 열의 추출

아래의 2차원 리스트에 대해, 두 번째 행과 세 번째 열을 추출하는 코드를 작성하세요.

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

# 두 번째 행을 추출
# 세 번째 열을 추출

print(second_row)
print(third_column)
# 예상 출력:
# [4, 5, 6]
# [3, 6, 9]

연습 문제5: 데이터 필터링

아래의 2차원 리스트(각 행은 상품명과 가격을 나타냄)에 대해, 가격이 1000 이상인 상품을 추출하는 코드를 작성하세요.

products = [
    ["Apple", 1200],
    ["Banana", 800],
    ["Cherry", 1500]
]

# 가격이 1000 이상인 상품을 추출

print(expensive_products)
# 예상 출력: [['Apple', 1200], ['Cherry', 1500]]

이 연습 문제를 통해 2차원 리스트 조작에 대한 이해를 깊게 할 수 있을 것입니다. 마지막으로, 이 글의 내용을 요약합니다.

요약

본 기사에서는 Python에서 2차원 리스트를 조작하는 방법에 대해 자세히 설명했습니다. 기본적인 2차원 리스트 정의 및 접근 방법부터 시작하여, 행과 열의 추가・삭제, 행과 열의 교체, 특정 행이나 열의 추출과 같은 구체적인 조작 방법을 소개했습니다. 또한, 실제 응용 예를 통해 2차원 리스트의 실용적인 활용 방법을 배우고, 이해를 돕기 위한 연습 문제도 제공했습니다.

Python에서 2차원 리스트를 효과적으로 조작하는 스킬을 습득하면, 데이터의 처리 및 분석을 보다 효율적으로 수행할 수 있습니다. 이 기사를 참고하여 실제로 코드를 시도해 보며, 이해를 더욱 깊이 해보시기 바랍니다.

목차