행렬 형태의 중첩 리스트에서 요소들을 그룹화하여 나열해야 하는 경우, 간단한 반복문과 '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)을 활용한 해시 기반 접근 방식을 고려하는 것이 좋습니다.