如何用Python正規方式遍歷和處理兩個列表並從中創建新的列表?

2024-09-27 17:41:06 发布

您现在位置:Python中文网/ 问答频道 /正文

下面的代码适用于我,但不是“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知识。你知道吗


Tags: 方法代码inactions列表forlensession
1条回答
网友
1楼 · 发布于 2024-09-27 17:41:06

这里有一个建议。循环遍历包含要筛选的值的列表枚举,如果该值超过阈值,则将给定索引处的值放入“精英”列表。你知道吗

elite_states, elite_actions = [], []
for i, val in enumerate(reward_batch):
    if val >= reward_threshold:
        elite_states.append(states_batch[i])
        elite_actions.append(actions_batch[i])

Python的核心思想是始终将可读性放在紧凑性(甚至速度)之上。查看Zen of Python。如果你尊重这些原则,你可以称你的代码为“Pythonic”。你知道吗

相关问题 更多 >

    热门问题