Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

หาสับเซ็ท (Subsets) ขนาดกำหนดจากเซ็ตใน Python

โจทย์: กำหนดเซ็ตและขนาด 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 ซ้ำ โค้ดข้างต้นแก้ไขแล้ว