下面的代码适用于我,但不是“beautiful”/“Pythonesque”。你能建议一个更漂亮的/Python式的方法吗?你知道吗
elite_states = []
elite_actions = []
for session_i in range(0,len(states_batch)):
for t in range(0,len(states_batch[session_i])):
if (rewards_batch[session_i] >= reward_threshold):
elite_states.append(states_batch[session_i][t])
elite_actions.append(actions_batch[session_i][t])
我是Python新手,已经阅读了列表理解的相关内容,并且觉得可能有更好的方法来实现这段代码的功能。它需要三个列表,例如:
states_batch = [
[1,2,3],
[4,2,0,2],
[3,1]
]
actions_batch = [
[0,2,4],
[3,2,0,1],
[3,3]
]
rewards_batch = [
3,
4,
5,
]
然后创建两个新列表,它们是“states\u batch”和“actions\u batch”的过滤版本,具体取决于“rewards\u batch”中的相应项是否与阈值匹配。你知道吗
我可以想象一个Pythonesque的方法,使用列表理解来做这件事,比如:
精英州=[州中州的州\u批[x][y]如果奖励\u批[x][y]>;奖励\u阈值]
当然,这包括变量“x”和“y”,它们是“隐式的”
(顺便说一句-这是关于强化学习的Corsera assignment的一部分。我不是在寻求帮助来解决这个问题。。因为上面的代码已经起作用了。我只是想通过编写更漂亮的代码来提高我的Python知识。你知道吗
这里有一个建议。循环遍历包含要筛选的值的列表枚举,如果该值超过阈值,则将给定索引处的值放入“精英”列表。你知道吗
Python的核心思想是始终将可读性放在紧凑性(甚至速度)之上。查看Zen of Python。如果你尊重这些原则,你可以称你的代码为“Pythonic”。你知道吗
相关问题 更多 >
编程相关推荐