有没有一种快速的方法可以有条件地将循环添加到python中的for循环中?

时间:2020-08-22 07:04:19

标签: python for-loop

如果满足条件,是否有一种简单的方法可以在for循环中添加一个附加循环?

在epsilon-greedy的倾斜算法中,该算法应以1-epsilon的概率返回计算出的答案(在这种情况下,计算出的答案是N * N numpy数组,其中一些Actn1> Actn2)。但是,有时要探索环境,该算法将生成一个随机答案。这意味着对于固定数目的情节,循环将终止并返回随机答案,而不是概率为Epsilon的计算答案。

    for i in range(Episodes)
        ..... 
        if np.random.uniform(0,1) >= ep:
            Ans = StActn1 >= StActn2
        else:
            Ans = np.array(np.random.choice((0, 1), size=(10, 10)))
    return(Ans)

如果是这种情况,是否有一种方法可以强制其进行其他循环?我想我正在寻找一种简单的for循环方式来获得类似于此类的行为。

  while i <= Episodes or c == 1:
        .....
        if np.random.uniform(0,1) >= ep:
            Ans = QH >= QS
            c=0  
        else:
            Ans = np.array(np.random.choice((0, 1), size=(PlrDm, DlrDm)))
            c=1 
  return(Ans)

这可以在python中完成吗?

2 个答案:

答案 0 :(得分:1)

我假设您只希望该额外循环最多发生一次,因此您可以添加一个标志:

    once_more = False
    for i in range(Episodes)
        ... 
        if np.random.uniform(0,1) >= ep:
            Ans = StActn1 >= StActn2
            once_more = False
        else:
            Ans = np.array(np.random.choice((0, 1), size=(10, 10)))
            once_more = True
    if once_more:
        ...
        Ans = StActn1 >= StActn2
    return Ans

答案 1 :(得分:0)

不确定这是否是解决问题的最佳方法,但我应该在if语句中添加一个附加条件。

for i in range(Episodes)
    ..... 
    if np.random.uniform(0,1) >= ep or i == Episodes:
        Ans = StActn1 >= StActn2
    else:
        Ans = np.array(np.random.choice((0, 1), size=(10, 10)))
return(Ans)