2017-06-13 1 views
-7

私のように3つのソートされたリスト(すなわち、値の面で、キー)を持っている:1のための最高値と最低値を持っているN1、N2、およびN3、外に、私はそれを見たいと思ってPythonリストのガイダンス?

N1: [(100, 'T'), (40, 'D'), (20, 'J'), (10, 'C'), (1, 'P')] 
N2: [(60, 'T'), (50, 'D'), (30, 'J'), (8, 'C'), (2, 'P')] 
N3: [(50, 'T'), (30, 'D'), (20, 'J'), (10, 'C'), (1, 'P')]` 

T、D、J、C、Pをそれぞれ指定します。私は、T、D、J、C、Pの値の範囲を持つ5つの一時的なリストを作成したいが、それぞれのリストの識別でも、T = {N1の100、N2の60、N3の50 }。あなたの提案は高く評価されます。

また、J、D、T(または任意の3つの嗜好ペア)として自分の嗜好順位を入力すると、N1、N2、N3の中から最良のリストが選択されることがわかります値。

+1

["N1、N2、N3の文字コードはそれぞれinfactキーと(値、キー)ペアがそれぞれの辞書からすべてフェッチされました]というコメントになりました。"(https:// stackoverflow。 com/questions/44519628 /ガイダンスオンpython-lists#comment76031326_44519775)。オリジナルの辞書を表示するために質問を更新し、問題にどのようにアプローチしてください。私はあなたがここに示したものよりも「元の辞書」を使って問題を解決する方が簡単かもしれないと思う。必要な出力を含めることを忘れないでください。 :) – MSeifert

+0

コメントに投稿してください、ちょうど[編集]質問: – MSeifert

+0

完了し、あなたの助けに感謝します。私は実際にはPythonを学び、さまざまなアルゴリズムを実装しようとしています。 – engqureshi

答えて

0

はあなたのサンプルの入力はあなたがN1N2N3にcaliculationsをしたい input = [T, D, J]またはinput = [D,J,P]

可能性があります。出力を確認します。各サンプル出力が [('N1', ('T', 100)), ('N2', ('D', 50)), ('N2', ('J', 30))][('N2', ('D', 50)), ('N2', ('J', 30)), ('N2', ('P', 2))]

であろう場合は、次のよう そして次に溶液です。

#These are some pre decleration supporting constants... 
T , D, J, C, P = 'T' , 'D', 'J', 'C', 'P' 
NW = [ 'N1', 'N2', 'N3'] 

#These are actual input data. 
N1 = [(100, 'T'), (40, 'D'), (20, 'J'), (10, 'C'), (1, 'P')] 
N2 = [(60, 'T'), (50, 'D'), (30, 'J'), (8, 'C'), (2, 'P')] 
N3 = [(50, 'T'), (30, 'D'), (20, 'J'), (10, 'C'), (1, 'P')] 
swp_tup = lambda N_list: [(t[1], t[0]) for t in N_list] #swaping 

#Just creating the swapped tuples collection. This can be avoided by changing the code while creationg of N1, N2, N3. 
data = [swp_tup(N1), swp_tup(N2), swp_tup(N3)] 

#Creating transpose of given data... to do actual caliculation. 
transpose = zip(*data) 

# Finding the max value of each row, This row was a column in input data. 
def calculate(input_list): 
    """Returning the NetworkID with Max for each input type 

    >>> calculate(['T','D','J']) 
    [('N1', ('T', 100)), ('N2', ('D', 50)), ('N2', ('J', 30))] 
    >>> calculate(['D','J','P']) 
    [('N2', ('D', 50)), ('N2', ('J', 30)), ('N2', ('P', 2))] 
    """ 
    output = list() 
    for i, curr_data in enumerate(transpose): 
     # finding max of current row. 
     m = max(curr_data) 
     # checking if the value is there in given input. 
     if m[0] in input_list: 
      results = [i for i, j in enumerate(curr_data) if j == m] 
      output.append((NW[results[0]] , m)) 

    return output 

if __name__ == "__main__": 
    print calculate([D,J,P]) 

必要に応じて最適化することができます。間違いなく最適化されたコードが存在する可能性があります。 :)

同様にminも実行できます。

質問が変更された場合、この解決策は無効です。 :)

+0

ありがとう。感謝しています。私はそれに取り組んでおり、ここでもバージョンを共有しています。 'swp_tup = lambda N_list:N_list'のtの[(t [1]、t [0])、2 'results = [i for 3) '(output.append((NW [results [0])、m))' ループは混乱しているように見えます。 – engqureshi

+0

第1点: ' 入力リストを繰り返し処理し、指定されたタプルを入れ替えるラムダ関数です。 実際にはN1は '[( 'T'、100)、( 'D'、40)、( 'J'、20)、( 'C'、10)、( 'P'、1 )] ' 同様にタプルのリストは入れ替えられます。 2つの要素のタプルに対してのみ適切に機能します。 '第2ポイント:' mは最大値を表します。結果は最大値の出現位置をすべて保持します。 第3の点:最初の最大発生ネットワークの名前と実際の最大値の組み合わせでタプルのリストを構築しようとしています。 – Haranadh

+0

@engqureshiこれが役に立ちます。 – Haranadh

-4

別の変数を作成することをお勧めします。これは、文字コードをキーとして、辞書のタスクと思われるためです。私が理解ごquestiondから

+0

文字コードはinfactキーと(値、キー)のペアですN1、N2、N3のそれぞれの辞書からすべて取り出しました – engqureshi

関連する問題