Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python에서 사용자 지정 길이의 행렬 만들기 – zip과 map 활용법


파이썬으로 행렬(matrix)을 만들다 보면, 결과 행렬에서 특정 요소가 몇 번 반복될지 직접 제어해야 하는 경우가 있습니다. 이 글에서는 요소들이 리스트 형태로 주어졌을 때, 각 요소를 원하는 개수만큼 포함하는 행렬을 만드는 두 가지 방법을 소개합니다.

1. zip 함수 사용하기

먼저 행렬에 사용할 요소들을 담은 리스트를 선언하고, 이어서 각 요소가 행렬에 등장할 횟수를 저장하는 리스트를 선언합니다. 그런 다음 zip 함수로 두 리스트를 묶고, 리스트 컴프리헨션(for 루프)을 활용해 요소를 지정된 횟수만큼 반복한 행렬을 생성합니다.

예제

listA = ['m', 'n', 'p', 'q']

# 요소 개수
elem_count = [1, 0, 3, 2]

# 주어진 리스트
print("Given List of elements: ", listA)
print("Count of elements : ", elem_count)

# 행렬 생성
res = [[x] * y for x, y in zip(listA, elem_count)]

# 결과 출력
print("The new matrix is : ", res)

출력 결과

위 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.

Given List of elements: ['m', 'n', 'p', 'q']
Count of elements : [1, 0, 3, 2]
The new matrix is : [['m'], [], ['p', 'p', 'p'], ['q', 'q']]

출력 결과를 보면, 반복 횟수가 0으로 지정된 요소('n')는 빈 리스트 []로 표현되며, 나머지 요소들은 지정된 횟수만큼 각각의 하위 리스트 안에 담기는 것을 확인할 수 있습니다.

2. map과 mul 함수 활용하기

이번 방식에서는 앞서 사용한 zip 대신 operator 모듈의 mul 메서드를 사용합니다. map 함수가 리스트의 모든 요소에 mul 메서드를 자동으로 적용해 주기 때문에, 별도의 for 루프 없이 더욱 간결하게 코드를 작성할 수 있다는 장점이 있습니다.

예제

from operator import mul

listA = ['m', 'n', 'p', 'q']

# 요소 개수
elem_count = [1, 0, 3, 2]

# 주어진 리스트
print("Given List of elements: ", listA)
print("Count of elements : ", elem_count)

# 행렬 생성
res = list(map(mul, listA, elem_count))

# 결과 출력
print("The new matrix is : ", res)

출력 결과

위 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.

Given List of elements: ['m', 'n', 'p', 'q']
Count of elements : [1, 0, 3, 2]
The new matrix is : ['m', '', 'ppp', 'qq']

두 방식의 결과에는 미세한 차이가 있습니다. zip 방식은 각 요소를 리스트로 감싸 2차원 구조([[...]])를 만드는 반면, map + mul 방식은 문자열 자체를 반복 연산하여 하나의 문자열로 연결(예: 'ppp')합니다. 따라서 중첩 리스트 형태의 행렬이 필요하다면 첫 번째 방법을, 단일 문자열 형태가 필요하다면 두 번째 방법을 선택하면 됩니다.