Re: [問題]迭代層數未知

看板Python作者 (Alien)時間5年前 (2019/04/16 12:37), 編輯推噓3(300)
留言3則, 3人參與, 5年前最新討論串2/2 (看更多)
其實只要把問題分解,再配合現有一些工具 (主要就是itertools 啦),整個問題就變很 簡單。 首先你有 n 個 list-of-set。你所謂「互相配 合」的第一步其實就是要從每個list 取一個 Element,從而找出所有可能的組合。 這用itertools.product() 就行了: Eg: a= [A, B , C] b= [L, M, N] c= [X, Y, Z] itertools.product(a,b,c) 就會得到 (A,L,X) (A,L,Y) (A,L,Z) ... ( C, N,Z) 所有組合 要把每個組合(tuple-of-set) union 一起, 則只需做 set(itertools.chain(...)) 所以假設你有一個list-of-list-of-set, 大概做: foo = [ [ {1,2,3}, {3,4} ], [{5,6}, {7,8}], [{1,4,5}, {2,4,6}]] for l in itertools.product(*foo): s = set(itertools.chain(*l)) # do whatever you need 上面就可以讓你遍歷所有組合了 (當然可以寫得更簡短。你搞明白再自己試吧) -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 45.64.241.235 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1555389421.A.E48.html

04/16 14:00, 5年前 , 1F
推(Y)
04/16 14:00, 1F

04/17 09:29, 5年前 , 2F
此篇正解 itertools >> for loop
04/17 09:29, 2F

04/18 17:16, 5年前 , 3F
感謝樓主建議,我會再多研究itertools
04/18 17:16, 3F
文章代碼(AID): #1SjLljv8 (Python)
文章代碼(AID): #1SjLljv8 (Python)