我遇到一段代码,上面写着:
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/