2016-11-25 6 views
0

私はPythonで働いていると私はこのリスト条件 - Pythonの

for i in range(0, len(state1)): 
    observations = [{'state_transitions': [{'state': state1[i], 
              'action': action[i], 
              'state_': state2[i]},], 
        'reward': 0},] 

を持っている私は、観測内部句に入れたいと、このような何か(ただし、これは私にエラーを与えている)になります。

observations = [ 
    for i in range(0, len(state1)): 
     {'state_transitions': [{'state': state1[i], 
           'action': action[i], 
           'state_':state2[i]},], 
     'reward': 0},] 
print observations; 

誰でもこの手伝いできますか?しかし、それはあなたの式の後を置いている - -

+1

を、私はあなたが言っているのか理解していれば、私はあなたがリストの内包をしたいと思います。コードの最初のビットは途中ですべての反復で 'observations'を上書きします。 –

+0

forループをリストの中に入れることはできません。 – Ezio

答えて

3
: - 何して興味のあることはシーケンス内の各項目で、それ自体 i変数ではない場合、あなたはあなたの各シーケンスの一つの項目を得るために zipコールを使用することができます

達成しようとしているもの(forループの結果に基づいてリストを作成する)は、というリストの理解と呼ばれます。構文は次のとおりです。my_list = [do_something(item) for item in my_iterable]

います:

observations = [ 
    { 
     'state_transitions': [ 
      { 'state': state1[i], 'action': action[i], 'state_':state2[i] }, 
     ], 
     'reward': 0 
    } for i in range(0, len(state1)) 
] 
print(observations) 
1

Pythonはリスト宣言内で行くことができます句のために備えていないので、これは動作します:

observations = [{ 
    'state_transitions': [{ 
     'state': state1[i], 'action': action[i], 'state_':state2[i] 
      }], 
    'reward': 0 
    } for i in range(0, len(state1)) 
] 

それに加えて、Pythonのforはhigerのelvelのinterationsのために設計されています

observations = [{ 
    'state_transitions': [{ 'state': st1, 'action': act, 'state_':st2}], 
    'reward': 0 
    } for st1, act, st2 in zip(state1, action, state2) 
] 
+1

構文が無効です。 'の後に': 'を削除してください。 – Guillaume

+0

ありがとうございます。 – jsbueno