作者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/cn.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