특정 공통 요소를 기준으로 리스트를 집합(set)으로 변환해야 할 때가 있습니다. 이럴 때는 'enumerate'를 사용해 집합을 순회하면서 각 요소에 조건을 적용하는 메서드를 정의하면 됩니다. 여기에 'union' 메서드와 'map' 메서드를 함께 활용합니다.
예제 코드
아래는 공통 요소를 기준으로 리스트를 집합으로 변환하는 과정을 보여주는 예제입니다.
def common_elem_set(my_set):
for index, val in enumerate(my_set):
for j, k in enumerate(my_set[index + 1:], index + 1):
if val & k:
my_set[index] = val.union(my_set.pop(j))
return common_elem_set(my_set)
return my_set
my_list = [[18, 14, 12, 19], [9, 6, 2, 1], [54, 32, 21, 17], [18, 11, 13, 12]]
print("The list is :")
print(my_list)
my_set = list(map(set, my_list))
my_result = common_elem_set(my_set)
print("The result is :")
print(my_result)
출력 결과
The list is :
[[18, 14, 12, 19], [9, 6, 2, 1], [54, 32, 21, 17], [18, 11, 13, 12]]
The result is :
[{11, 12, 13, 14, 18, 19}, {9, 2, 6, 1}, {32, 17, 21, 54}]
코드 설명
'common_elem_set'이라는 이름의 메서드를 정의하고, 리스트를 매개변수로 전달받습니다.
'enumerate'를 사용해 리스트의 각 요소를 인덱스와 함께 순회합니다.
'&' 연산자를 사용해 두 집합 사이에 공통 요소가 있는지 검사하는 조건을 설정하고, 조건이 충족되면 'union' 메서드로 해당 집합들을 하나로 병합합니다.
병합이 일어나면 자기 자신을 재귀적으로 호출하여, 더 이상 합칠 수 있는 집합이 없을 때까지 같은 과정을 반복합니다.
메서드 외부에서는 리스트 안에 리스트가 포함된 중첩 리스트를 정의합니다.
이 중첩 리스트를 콘솔에 출력합니다.
'map' 메서드를 사용해 각 내부 리스트를 집합으로 변환한 뒤, 다시 리스트 형태로 감쌉니다.
변환된 결과를 변수에 할당합니다.
해당 변수를 인자로 넘겨 메서드를 호출합니다.
최종 병합 결과를 콘솔에 출력합니다.