Gộp các tập hợp (set) có giao nhau không rỗng thành một tập hợp lớn hơn, lặp lại cho đến khi không còn giao nhau.
Ví dụ
Minh họa:
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("Danh sách:")
print(my_list)
my_set = list(map(set, my_list))
my_result = common_elem_set(my_set)
print("Kết quả:")
print(my_result)
Kết quả
Danh sách: [[18, 14, 12, 19], [9, 6, 2, 1], [54, 32, 21, 17], [18, 11, 13, 12]]
Kết quả: [{11, 12, 13, 14, 18, 19}, {9, 2, 6, 1}, {32, 17, 21, 54}]
Giải thích
- Chuyển từng sublist thành set.
- Đệ quy: nếu hai set giao nhau (
val & k), union chúng, xóa set thứ hai, gọi lại hàm. - Dừng khi không còn cặp nào giao nhau.