看板 Python 關於我們 聯絡資訊
大家好, 最近遇到一個找最小set的問題,舉個例: A=[{1,2,3}, {4,5}] B=[{3,4,5}, {1,3,4}, {1,5}] A,B 列表內的set互相配對後, 找出長度最少的set有兩組: {3,4,5}, {1,4,5} 因此output為 [{3,4,5}, {1,4,5}] 若是以上的例子通常只要兩層for迴圈就寫出來了, 但現在列表的數量未知,可能有A,B,C,D.... 請教各位高手有沒有什麼比較好的解法 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 223.136.101.122 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1555305373.A.30C.html
jiyu520: 只要最小的組合? 04/15 13:20
jiyu520: 直接挑選出各自最小數量的? 04/15 13:21
行不通,舉個例: A=[{1,2,3}, {4,5}] B=[{1,2,3}, {6,7}] 找最小數量解是{4,5,6,7} 但長度最少set解是{1,2,3} ※ 編輯: keven92110 (223.136.101.122), 04/15/2019 13:26:15
jiyu520: 瞭解意思,那A,B,C,D要兩兩做、還是要一起? 04/15 13:31
全部一起 ※ 編輯: keven92110 (223.136.101.122), 04/15/2019 13:46:28 其實我的問題主要是遇到未知的迭代層數該怎麼辦XD 因為現在input的list可能只有A,B 也可能有A,B,C,也可能A,B,C,D,E... ※ 編輯: keven92110 (223.136.101.122), 04/15/2019 13:56:43
jiyu520: https://imgur.com/a/CsSSZru 04/15 14:40
jiyu520: 用*做呢? 04/15 14:41
AlaRduTP: https://ideone.com/bKMgLl 04/15 15:45
AlaRduTP: 這樣如何 04/15 15:46
AlaRduTP: 其實方法很多 重點只在於要把組合聯集的函數和取出最短 04/15 16:10
AlaRduTP: 長度的函數分開 全部組合完再找最短就好了 04/15 16:10
感謝兩位高手解答,樓上的解法就是我想要的答案,上了一課! ※ 編輯: keven92110 (42.72.187.143), 04/15/2019 20:09:25
adrianshum: 只有我看了幾次還看不懂要求嗎? 04/15 20:48
cutekid: 看不懂+1 (哈) 04/16 01:29
bibo9901: 應該是: 求 i,j 使得 A[i]∪B[j] 有最少的元素 04/16 02:02
bibo9901: 一般化,求 {i_k} 使得 ∪A_k[i_k] 有最少的元素 04/16 02:04
adrianshum: 樓上,可是我就是搞不懂output 的 {1,4,5} 從哪來的, 04/16 10:04
adrianshum: 明明 這從沒在 A 或 B 出現嘛... 04/16 10:04
jiyu520: "互相配對" -> set(setA元素和setB元素) 的意思啦 04/16 10:19
adrianshum: 喔!互相配對原來是這意思!建議OP 下次直接說UNION 04/16 10:27
adrianshum: 吧... 04/16 10:27
cutekid: 我看了 bibo 大的解釋才懂(哈) 04/16 11:04