作者keven92110 (感恩師傅)
看板Python
標題[問題]迭代層數未知
時間Mon Apr 15 13:16:11 2019
大家好,
最近遇到一個找最小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://webptt.com/m.aspx?n=bbs/Python/M.1555305373.A.30C.html
1F:推 jiyu520: 只要最小的組合? 04/15 13:20
2F:→ 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
3F:推 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
5F:→ jiyu520: 用*做呢? 04/15 14:41
7F:→ AlaRduTP: 這樣如何 04/15 15:46
8F:→ AlaRduTP: 其實方法很多 重點只在於要把組合聯集的函數和取出最短 04/15 16:10
9F:→ AlaRduTP: 長度的函數分開 全部組合完再找最短就好了 04/15 16:10
感謝兩位高手解答,樓上的解法就是我想要的答案,上了一課!
※ 編輯: keven92110 (42.72.187.143), 04/15/2019 20:09:25
10F:→ adrianshum: 只有我看了幾次還看不懂要求嗎? 04/15 20:48
11F:推 cutekid: 看不懂+1 (哈) 04/16 01:29
12F:→ bibo9901: 應該是: 求 i,j 使得 A[i]∪B[j] 有最少的元素 04/16 02:02
13F:→ bibo9901: 一般化,求 {i_k} 使得 ∪A_k[i_k] 有最少的元素 04/16 02:04
14F:→ adrianshum: 樓上,可是我就是搞不懂output 的 {1,4,5} 從哪來的, 04/16 10:04
15F:→ adrianshum: 明明 這從沒在 A 或 B 出現嘛... 04/16 10:04
16F:推 jiyu520: "互相配對" -> set(setA元素和setB元素) 的意思啦 04/16 10:19
17F:→ adrianshum: 喔!互相配對原來是這意思!建議OP 下次直接說UNION 04/16 10:27
18F:→ adrianshum: 吧... 04/16 10:27
19F:推 cutekid: 我看了 bibo 大的解釋才懂(哈) 04/16 11:04