列表中的条件 - Python

Condition in list - Python

我在 python 工作,我有这个列表

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

我想将 for 子句放在观察中,像这样(但这会给我一个错误):

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

谁能帮我解决这个问题?

Python 确实有一个 for 子句可以进入列表声明 - 但它被放置在 之后 你的表达式 - 所以这会起作用:

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

除此之外,Python 的 for 是为更高层次的交互而设计的 - 如果您感兴趣的是序列中的每个项目,而不是变量 i 本身,您可以使用 zip 调用为您生成每个序列的一项:

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

您要完成的任务(根据 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)