Why is this list comprehension giving me a syntax error?
本问题已经有最佳答案,请猛点这里访问。
我有以下清单的理解。
1 | return [tower for tower in state if tower != space else []] |
但是当我运行它时,python会返回这个错误:
1 2 3 | return [tower for tower in state if tower != space else []] ^ SyntaxError: invalid syntax |
号
如果我删除else语句,它将正常运行。我是不是写错了其他的陈述?
列表理解支持
如果要使用条件表达式构建
1 | return [tower for tower in (state if tower != space else [])] |
号
但我怀疑您希望改为更改元素表达式中表达式的值;这不是过滤,而是为某些项生成不同的值。使用条件表达式生成值:
1 | return [tower if tower != space else [] for tower in state] |
或者,如果您真的想过滤,只需省略
1 | return [tower for tower in state if tower != space] |
。
在构造列表理解时,请记住,需要从左到右嵌套读取表达式,最后一个表达式在左侧生成结果:
1 | [element_producing_expression for name in iterable if filter_expression] |
道德等同于:
1 2 3 | for name in iterable: if filter_expression: element_producing_expression |
。
在这里,您可以根据您的用例的需要使用尽可能多的嵌套循环和
我上面描述的三个选项如下:
1 2 3 4 5 6 7 8 9 10 11 12 | # conditional expression producing the iterable for tower in (state if tower != space else []): tower # conditional expression in the element expression for tower in state: tower if tower != space else [] # filtering expression with no else for tower in state: if tower != space: tower |
。
你在理解的
1 | [tower if tower != space else [] for tower in state] |
当你使用
另一方面,
这是因为python不支持清单中的
但是,可以通过使用条件表达式来获得所需的结果。
1 | [tower if tower != space else [] for tower in state] |
。
这个怎么样:
1 | [tower if tower != space else [] for tower in state] |