2017-11-14 3 views
-1

私は二つのリストグローバルとして1、および関数内のローカルとして1リスト内のPython一致する文字列とインクリメント値

List1 = [[['MP01'], 0], [['MP02'], 0], [['MP03'], 0], [['MP04'], 0], [['MP05'], 0], [['MP06'], 0], [['MP07'], 0], [['MP08'], 0], [['MP09'], 0], [['MP10'], 0], [['MP11'], 0], [['MP12'], 0], [['MP13'], 0], [['MP14'], 0], [['MP15'], 0], [['MP16'], 0], [['MP17'], 0], [['MP18'], 0], [['MP19'], 0], [['MP20'], 0], [['MP21'], 0], [['MP22'], 0], [['MP23'], 0], [['MP24'], 0], [['MP25'], 0], [['MP26'], 0], [['MP27'], 0], [['MP28'], 0], [['MP29'], 0], [['MP30'], 0], [['MP31'], 0], [['MP32'], 0]] 

function(): 
    List2 = [['MP18', 100], ['MP28', 50], ['MP20', 30], ['MP07', 30], ['MP12', 10], ['MP03', 10], ['MP30', 10], ['MP14', 10], ['MP15', 5], ['MP16', 5], ['MP13', 5], ['MP02', 5], ['MP26', 5], ['MP23', 5], ['MP22 ', 5], ['MP01', 5]] 

    final_list = [[[a], b+dict(List2).get(a, 0)] for [a], b in List1] 

を持っている基本的には、「LIST2は」選手たちはのラウンドで達成したスコアを表し、ゲーム(MP18は100、MP28は50など)と "List1"は、各プレイヤーのためのゲームの数ラウンドのためのスコアを蓄積するために使用されます。

私がしたいことは、基本的に各プレイヤーのスコアを「List1」に追加することです。問題は、「final_list」が関数内にあるためです。関数が呼び出され、 List2 "、新しい値を" List1 "に追加すると、単純に上書きされます。例えば、最初のラウンドの後に「List1を」は「LIST2」からのプレーヤーのために更新された値を持つことになります。

['MP18', 100], ['MP28', 50] etc 

だから、MP18は、100ポイントを持つことになりますし、MP28は、のを介して第2の実行時に、しかし50などを持っていますプログラム(第2ラウンド)「LIST2」は、例えば、各選手のための異なる値を有することになる。

[['MP18, 50], [MP28, 100] etc 

しかし、「final_list」は関数内から作成されているため、スコアの最初のセットはによって上書きされている

二番目のものの代わりに二番目のものが最初のものに追加されていれば意味がありますか?

[[MP28, 100], [MP18, 50] 

としては、所望の結果に反対する::のようなので、「List1を」を介して、第2の実行になります

[[MP28, 150], [MP18, 150]] 

うまくいけば、これは役に立つ説明をもう少しです:D

+0

:[スロー最近のコメントに関しては

、あなたは機能のfinal_list外を作成するには、これを試すことができますPythonの "inner join"リストのコード](https://stackoverflow.com/questions/47267727/slow-code-in-inner-joins-lists-in-python)を参照してください。 'List2'をdictにして、O(1)の' List1'を更新し、dictから '' MP''値を探します。 –

+0

ようこそ。残念ながら、これはディスカッションフォーラムやチュートリアルではありません。時間をかけて[ask]とそのページの他のリンクを読んでください。 [誰かが私を助けることができますか? "実際の質問ではありません](https://meta.stackoverflow.com/q/284236/2823755) – wwii

答えて

1
リスト内の値を乗じ、後に、次に

List1 = [[['MP01'], 0], [['MP02'], 0], [['MP03'], 0], [['MP04'], 0], [['MP05'], 0], [['MP06'], 0], [['MP07'], 0], [['MP08'], 0], [['MP09'], 0], [['MP10'], 0], [['MP11'], 0], [['MP12'], 0], [['MP13'], 0], [['MP14'], 0], [['MP15'], 0], [['MP16'], 0], [['MP17'], 0], [['MP18'], 0], [['MP19'], 0], [['MP20'], 0], [['MP21'], 0], [['MP22'], 0], [['MP23'], 0], [['MP24'], 0], [['MP25'], 0], [['MP26'], 0], [['MP27'], 0], [['MP28'], 0], [['MP29'], 0], [['MP30'], 0], [['MP31'], 0], [['MP32'], 0]] 

List2 = [['MP18', 100], ['MP28', 50], ['MP20', 30], ['MP07', 30], ['MP12', 10], ['MP03', 10], ['MP30', 10], ['MP14', 10], ['MP15', 5], ['MP16', 5], ['MP13', 5], ['MP02', 5], ['MP26', 5], ['MP23', 5], ['MP22 ', 5], ['MP01', 5]] 
final_list = [[[a], b+dict(List2).get(a, 0)] for [a], b in List1] 

:あなたはこれを試すことができます

new_final_list = [[[a], 2*b] for [a], b in List1] 

出力:

[[['MP01'], 0], [['MP02'], 0], [['MP03'], 0], [['MP04'], 0], [['MP05'], 0], [['MP06'], 0], [['MP07'], 0], [['MP08'], 0], [['MP09'], 0], [['MP10'], 0], [['MP11'], 0], [['MP12'], 0], [['MP13'], 0], [['MP14'], 0], [['MP15'], 0], [['MP16'], 0], [['MP17'], 0], [['MP18'], 0], [['MP19'], 0], [['MP20'], 0], [['MP21'], 0], [['MP22'], 0], [['MP23'], 0], [['MP24'], 0], [['MP25'], 0], [['MP26'], 0], [['MP27'], 0], [['MP28'], 0], [['MP29'], 0], [['MP30'], 0], [['MP31'], 0], [['MP32'], 0]] 

編集:関連

List1 = [[['MP01'], 0], [['MP02'], 0], [['MP03'], 0], [['MP04'], 0], [['MP05'], 0], [['MP06'], 0], [['MP07'], 0], [['MP08'], 0], [['MP09'], 0], [['MP10'], 0], [['MP11'], 0], [['MP12'], 0], [['MP13'], 0], [['MP14'], 0], [['MP15'], 0], [['MP16'], 0], [['MP17'], 0], [['MP18'], 0], [['MP19'], 0], [['MP20'], 0], [['MP21'], 0], [['MP22'], 0], [['MP23'], 0], [['MP24'], 0], [['MP25'], 0], [['MP26'], 0], [['MP27'], 0], [['MP28'], 0], [['MP29'], 0], [['MP30'], 0], [['MP31'], 0], [['MP32'], 0]] 

def some_function(): 
    List2 = [['MP18', 100], ['MP28', 50], ['MP20', 30], ['MP07', 30], ['MP12', 10], ['MP03', 10], ['MP30', 10], ['MP14', 10], ['MP15', 5], ['MP16', 5], ['MP13', 5], ['MP02', 5], ['MP26', 5], ['MP23', 5], ['MP22 ', 5], ['MP01', 5]] 
    global List1 
    List1 = [[[a], b+dict(List2).get(a, 0)] for [a], b in List1] 
+0

" final_list = [[[a]、b + dict (List2).get(a、0)] for [a]、List1のb]」行が実際に実行していますか?私はそれを理解するのに苦労しており、将来、知っておくと大変助かります。 – Sean

+0

@Sean 'final_list'はリストの理解を使って作成されます。本質的に、それは 'List1'を反復し、各文字列とそれに対応する値をアンパックします。次に、コードは 'dict'関数に渡すことによって' List2'から辞書を作成し、各反復時に文字列である 'a'に関連付けられたちょうど作成された辞書に格納された値にアクセスします。これは 'get'を使って実行され、文字列が見つからなければデフォルトのゼロを返します。ご質問がある場合はお知らせください。 – Ajax1234

+0

こんにちは私のプログラムでもう少し問題がありましたが、それが問題であればいくつかの助けを求めたいと思っていましたか?あなたが私に与えてくれたコードは素晴らしいですが、私のプログラムでは "List1"はグローバル変数で "List2"は関数内にあります(プログラムの早い段階で操作されました)。 "List1"がグローバル変数である理由は、関数が呼び出されるたびに値がリセットされないようにするためですが、 "final_list"リストが作成されると関数の内部で作成され、関数が呼び出されるたびにリセットされます。と呼ばれる。これを修正する方法はありますか?それがあなたに役立つなら私は自分のコードを投稿することができます:D – Sean

関連する問題