我如何迭代itertools.product()的结果?

问题描述 投票:0回答:1

我试图实现一个Q-Learning算法,我的状态空间包含了一个给定长度的向量中所有可能的数字0,1,2的组合。

现在我试图初始化一个充满零的Q表,它的行数与我的状态空间的行数相同。然后我想在每一步中运行状态空间并检查所有可能的状态向量中哪一个是现在的。但这意味着我必须给itertools.product()下标,怎么做呢? 因为当我试图从product中打印出第n个向量时,显示出product不可下标的错误。

我试过这个。

import itertools
NUMBER_OF_SECTORS = 6
state_space = itertools.product(*[[0, 1, 2]] * NUMBER_OF_SECTORS)
length = len(list(state_space)) # 729
       for obs in range(length):
            print(list(state_space[obs]))

还有,有没有可能,我怎样才能摆脱... ... length 变量?因为当我把for循环定义为。for obs in range(len(list(state_space))) 它根本就没有被执行

非常感谢您

python for-loop itertools
1个回答
2
投票

你只能迭代一个实例的 product 一次:之后,它将被消耗掉。list 遍历这个实例,以产生一个列表,并计算其长度。一旦你这样做了,状态空间就消失了;你剩下的只是长度。

你不需要将状态空间转换为一个 list 或计算它的长度,你可以直接在它上面迭代。

state_space = itertools.product([0,1,2], repeat=NUMBER_OF_SECTORS)
for state in state_space:
    print(state)
© www.soinside.com 2019 - 2024. All rights reserved.