:一つの方法は、記事を参照し、要件のセットの間の結合を達成するために以前に使用しhttps://www.cnblogs.com/mrlayfolk/p/12373532.htmlこの方法の高効率化を達成するための別の方法を使用して、この時間を。
目的:
従来の四組C1 = {11、22、13、14}、C2 = {11、32、23、14、35}、C3 = {11、22、38:例えば、複数組を求めて設定する前に}、C4 = {11、22、33、14、55、66}、及び、それらの間に設定されるべきです。
C1とC2とC3 = {11}、C1とC2とC4 = {14}、C1とC3とC4 = {22}。下図のように:
実装手順:
C1 = {11、22、13、14}、C2 = {11、32、23、14、35}、C3 = {11、22、38}、C4 = {:一例として、上記4組で11、22、33、14、55、66}。
次に、(1)最初に、より多くのことを行うためにメンバーシップのセットを見つけ、C4へ= {11、22、33、14、55、66}、C4の各メンバーの配列および各セットのメンバーを比較し、他のメンバーかどうかを判断しますコレクションが存在します。
(2)私たちは得ることができ、比較後:11∈C1、C2、C3、C4;22∈C1、C3、C4;14∈C1、C2、C4;33,55,66∈C4。
(3)次に、残りの組の残りのメンバーを見つけるために、C4を除いて、C1 = {13}、C2 = {32,23,35}、C3 = {38}。
数がメンバーを見つけるために(4)を設定し、ここでC2、C2、各部材が比較され、そして他のセットです。取得:32,23,35∈C2を。
(5)次に、のみC1とC3、及びメンバーの同じ数の二組は、例えば、メンバーC1及びC3を比較した後、得た:13∈C1,38∈C3。
以上の工程により、我々は最終的に得る:C1とC2とC3 = {11}、C1とC2とC4 = {14}、C1とC3とC4 = {22}。
もちろん、あなたが最初のコレクションのメンバーの最小数を見つけることができ、コレクションの他のメンバーと比較して、このコレクションのメンバーを使用して一つ一つは、各セットとの交点を求めることができます。
実装コード:
次のPythonコードが実装ケースの各セットのメンバの数と比較するセットの他のメンバーの最小使用。
1 #デコード:. 8 UTF- 2 。3 インポートOS 4 インポートSYS 。5 インポートxlrdに 6 インポートロギング 。7 インポートCSV 。8 インポートnumpyのAS NP 。9つの 10 #のパラメータおよび設定機能はlogging.basicConfig logging.basicConfig()メソッドを提供 。11 FORMAT = ' [%(FUNCNAME)S:%(LINENO)D]:%(メッセージ)S ' 12は LEVEL = logging.info 13は logging.basicConfig(= LEVELレベル、形式= FORMAT) 14 15 16 DEFFUNC(コンテンツ): 17 all_dict = {} 18 のための D における含有量: 19 のための K でd.keys(): 20 tmp_value = D [k]が 21 であれば、K でall_dict.keys(): 22 tmp_values = all_dict [K] 23 #更新成员数 24 のための I における範囲(LEN(tmp_value)): 25 もし tmp_value [i]がない でtmp_values: 26 tmp_values.append(tmp_value [i])と 27 all_dict [K] = tmp_values 28 29 IF K ません でall_dict.keys(): 30 #これは、条件を処理する:13として:[0、0]、辞書の値が繰り返し要素です。 31である tmp_values = [] 32 のための I における範囲((tmp_value)をLEN): 33である TMP = tmp_value [I] 34れる IF TMP にtmp_values: 35 進む 36 tmp_values.append(TMP) 37 all_dict [K] = tmp_values 38である 39 リターンall_dict 40 41は、 42である #ユニオンからGETコレクションがセット 43である DEF get_unions(コンテンツ): 44である c_mems_list = [] 45 用の C でコンテンツ: 46である c_mems_list.append(LEN(C)) 47 #の印刷(c_mems_list) 48 49 mems_list_index = NP .argsort(c_mems_list) 50 #の印刷(mems_list_index) 51は 52である #メンバーはメンバーの最小数を順次他のセットを採取し、比較するセット 53がある all_index_list = [] 54である ため c_indexでmems_list_index: 55 min_c =コンテンツ[c_index] #のコレクションの最小のメンバー 56である elem_index = {} #1 指標部材は、次の形式でセット配置されている店舗:[ELEM、索引] 57である ため ELEM に min_c: #の最小数は、メンバーのセット決定各部材は、他のセットに存在する 58 index_tmp = [] 59 index_tmp.append(c_index) #メンバーの最小数の最初の店舗インデックスセット 60 のため other_index で mems_list_index [c_indexの+ 1]: #セットの他のメンバーで開始決意存在存在するかどうか 61である がiF ELEM におけるコンテンツ[other_index]: #存在する場合は、部材がに配置されているコレクションのインデックスに追加された 62である index_tmp.append(other_index) 63である elem_index [ELEM] = index_tmp 64 all_index_list.append(elem_index) 65 66 #の印刷(all_index_list) 67 all_dict = FUNC(all_index_list) #削除重複率 68 69 リターンall_dict 70 71であり、 72 IF __name__ == " __main__ " : 73れる 74 #オリジナルデータ 75 C0 = {11、22、14 13である} 76 C1 = {11、32、23、14、35 } 77 C2 = {11、22、38 } 78 C3 = {11、22、33、14、55、66 } 79 80 プリント(' ######メイン##############を入力######## ' ) 81の RES = get_unions([C0、C1、C2、C3]) 82 のためのキーで:RES 83 プリント(キー、' :' 、RES [キー]) 84 プリント(' メイン##############エンド############## ')
出力:
1 ##############は##############主入力 2 38:[2 ] 3 11:[2、3、0、1 ] 4 22:[2、3 、0] 5 13 :[0] 6 14:[0、1、3 ] 7 32:[1 ] 8 35:[1 ] 9 23:[1 ] 10 33 [3 ] 11 66:[3 ] 12 55 [3 ] 13 ##############端主##############
レッツ・チェンジテスト用データのセット:
1 なら __name__ == " __main__ " : 2 3 #オリジナルデータ 4 C0 = {11、22、13、14、15 } 5 C1 = {11、22、23、14、35 } 6 C2 = {11、22、 38、15、66 } 7 C3 = {11、22、33、14、55、66 } 8 C4 = {22、33、15、89、33 } 9 10 プリント(' ######### #####主##############を入力' ) 11の RES = get_unions([C0、C1、C2、C3、C4]) 12 のためのキーでRES: 13 プリント(キー、' :' 、RES [キー]) 14 プリント(' ##############端主############# #")
出力:
1 ##############は##############主入力 2 [4:89 ] 3 33:[4、3 ] 4 22:[4 、0、1、2、3 ] 5 15:[4,0、2 ] 6 11:[0、1、2、3 ] 7 13 :[0] 8 14:[0、1、3 ] 9 35: [1 ] 10 23 [1 ] 11 66 [2、3 ] 12 38 [2 ] 13 55 [3 ] 14 #はメイン####を終了############# ##########
見て、と期待される出力が一致することができます。