列表理解支持if
但不else
因为if
部分过滤器元素,你要么包含一个元素,或者你不包括它,一个布尔值的选择。
如果你想利用条件表达式来构建for
循环,使用括号的迭代部分:
return [tower for tower in (state if tower != space else [])]
但我怀疑你想改变的表达在价值代替元素表达式;这不是过滤,你只是为某些项目产生不同的值。使用conditional expression出示你的价值观:
return [tower if tower != space else [] for tower in state]
,或者如果你真的想要进行筛选,简单地忽略else
:
return [tower for tower in state if tower != space]
当构建一个列表理解,记住,你需要阅读表达嵌套从左至右,最后表达产生结果出左侧:
[element_producing_expression for name in iterable if filter_expression]
是道德等价的:
for name in iterable:
if filter_expression:
element_producing_expression
在那里你可以使用尽可能多的嵌套循环和if
过滤器为您的使用案例需要。
我上述三个选项然后像:
# 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