我遇到一段代码,上面写着:

queue = [(Xi, Xk) for Xi in csp.vars for Xk in csp.neighbors[Xi]]

这相当于:
for Xi in csp.vars:
    for Xk in csp.neighbors[Xi]:
        queue.append((Xi, Xk))

或者这是否表示嵌套for语句之外的其他内容?

最佳答案

正如其他人已经指出的,这正是它的含义。
我还发现有时在列表理解/genexp中使用multiple会让人感到困惑,所以我通常会避免使用multiple。当我使用它们时,我通常把每一个for放在不同的行中,例如:

queue = [(Xi, Xk) for Xi in csp.vars
                  for Xk in csp.neighbors[Xi]]

甚至缩进:
queue = [(Xi, Xk) for Xi in csp.vars
                      for Xk in csp.neighbors[Xi]]

这就清楚了哪个是内部for循环。
此外,列表理解可以对每个for循环使用if表达式,因此完整的语法如下:
queue = [(Xi, Xk) for Xi in csp.vars
                      if condition_one()
                          for Xk in csp.neighbors[Xi]
                              if condition_two()
                                  ... ]

即使我希望你永远不要写那样的东西。结尾的if表达式很好,但是混合起来太麻烦了,一点也不可读。

关于python - 列表理解语法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12978571/

10-12 16:46