複数セットの間の結合を達成するために求めているのPython - 方法2

:一つの方法は、記事を参照し、要件のセットの間の結合を達成するために以前に使用し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_indexmems_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  #はメイン####を終了############# ##########

見て、と期待される出力が一致することができます。

おすすめ

転載: www.cnblogs.com/mrlayfolk/p/12383674.html