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

Python – 행렬(리스트) 요소를 그룹화하여 나열하는 방법

행렬 형태의 중첩 리스트에서 요소들을 그룹화하여 나열해야 하는 경우, 간단한 반복문과 'pop' 메서드, 리스트 컴프리헨션(list comprehension), 'append' 메서드를 함께 사용하면 손쉽게 구현할 수 있습니다.

동작 원리

이 기법은 다음과 같은 순서로 동작합니다. 먼저 반복문 안에서 pop()으로 리스트의 맨 뒤(마지막) 하위 리스트를 꺼냅니다. 이후 리스트 컴프리헨션을 통해 비교 대상 리스트에서 아직 그룹화되지 않은 요소만 추출하고, try-except 블록으로 매칭 여부에 따라 결과 리스트에 그룹 또는 단일 요소를 추가합니다.

예제

아래는 이를 구현한 예시입니다 −

my_list = [[14, 62], [51, 23], [12, 62], [78, 87], [41, 14]]

print("The list is :")
print(my_list)

check_list = [14, 12, 41, 62]
print("The list is :")
print(check_list)

my_result = []
while my_list:

   sub_list_1 = my_list.pop()

   sub_list_2 = [element for element in check_list if element not in sub_list_1]
   try:

      my_list.remove(sub_list_2)

      my_result.append([sub_list_1, sub_list_2])
   except ValueError:

      my_result.append(sub_list_1)

print("The result is :")
print(my_result)

출력

The list is :
[[14, 62], [51, 23], [12, 62], [78, 87], [41, 14]]
The list is :
[14, 12, 41, 62]
The result is :
[[[41, 14], [12, 62]], [78, 87], [51, 23], [14, 62]]

코드 설명

  • 정수로 이루어진 리스트의 리스트(중첩 리스트)를 정의하고 콘솔에 출력합니다.

  • 비교 기준이 될 또 다른 정수 리스트를 정의하고 콘솔에 출력합니다.

  • 그룹화된 결과를 저장할 빈 리스트를 하나 준비합니다.

  • while 반복문을 사용해 원본 리스트가 빌 때까지 반복하며, pop() 메서드로 가장 마지막 하위 리스트를 꺼냅니다.

  • 꺼낸 하위 리스트는 변수 sub_list_1에 할당됩니다.

  • 리스트 컴프리헨션을 사용해 두 번째 리스트를 순회하면서 sub_list_1에 포함되지 않은 요소들만 모아 새로운 리스트 sub_list_2를 만듭니다.

  • try-except 블록을 통해 매칭되는 하위 리스트가 존재하면 두 리스트를 묶어 결과에 추가하고, 존재하지 않아 ValueError가 발생하면 해당 하위 리스트를 그대로 결과에 추가합니다.

  • 반복이 끝나면 최종 그룹화된 결과 리스트가 콘솔에 출력됩니다.

참고 사항

이 방식은 pop()remove()가 모두 O(n) 연산이므로 데이터 크기가 클 경우 성능이 떨어질 수 있습니다. 대량의 데이터를 처리할 때는 딕셔너리나 집합(set)을 활용한 해시 기반 접근 방식을 고려하는 것이 좋습니다.