在python中,循环如何在列表分配中工作?

2024-06-26 10:09:39 发布

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

考虑以下命令:

elite_states  = [s for i in range(len(states_batch)) 
                if rewards_batch[i]>=reward_threshold for s in states_batch[i]]

我发现这相当于以下循环:

_l=[]
for i in range(len(states_batch)):
  for s in states_batch[i]:
    if rewards_batch[i]>=reward_threshold:
      _l.append(s)

但是,我不知道第一个命令中s之后的循环如何成为其等效的外部循环。我想了解命令的格式,以便了解它的工作原理


Tags: in命令forthresholdlenif格式batch
1条回答
网友
1楼 · 发布于 2024-06-26 10:09:39

I found that is equivalent to the following loop:

事实并非如此。列表理解的读取方式与普通嵌套循环相同。首先在range(len(states_batch))上循环,然后,在这个循环中,检查if rewards_batch[i]>=reward_threshold,然后,在这个条件中,运行最后一个循环

因此,“扩展”版本如下所示:

_l=[]
for i in range(len(states_batch)):
  if rewards_batch[i]>=reward_threshold:  # `if` and the inner `for` are switched
    for s in states_batch[i]:
      _l.append(s)

在代码中,这与理解非常相似:

_l = [
  s
  for i in range(len(states_batch))
  if rewards_batch[i]>=reward_threshold
  for s in states_batch[i]
]

唯一的区别是理解中的循环是按顺序编写的(一个在另一个之后),但在扩展版本中,它们会嵌套在另一个内部,理解中的最后一个循环嵌套得最深

相关问题 更多 >