โจทย์: กำหนดเซ็ตและขนาด n หาสับเซ็ท (subsets) ทั้งหมดที่มีขนาด n
ตัวอย่าง
Set: {'t', 'u', 't', 'o', 'r'} (ซ้ำจะถูกลบออกอัตโนมัติ → {'t','u','o','r'})
n = 2
วิธีที่ 1: itertools.combinations
import itertools
def findsubsets(s, n):
return list(itertools.combinations(s, n))
s = {'t', 'u', 't', 'o', 'r'}
print(findsubsets(s, 2))
# Output: [('u', 'r'), ('u', 'o'), ('u', 't'), ('r', 'o'), ('r', 't'), ('o', 't')]
วิธีที่ 2: combinations + map(set)
แปลงผลลัพธ์เป็น set แทน tuple
from itertools import combinations
def findsubsets(s, n):
return list(map(set, combinations(s, n)))
print(findsubsets(s, 3))
# Output: [{'u', 'o', 'r'}, {'u', 'r', 't'}, {'u', 'o', 't'}, {'o', 'r', 't'}]
วิธีที่ 3: List Comprehension
def findsubsets(s, n):
return [set(comb) for comb in combinations(s, n)]
print(findsubsets(s, 3))
# Output: [{'u', 'o', 'r'}, {'u', 'r', 't'}, {'u', 'o', 't'}, {'o', 'r', 't'}]
หมายเหตุ: โค้ดต้นฉบับมี bug ตัวแปร s vs str_ และ import ซ้ำ โค้ดข้างต้นแก้ไขแล้ว