Python 是否有条件 NOT 语句
Does Python have a conditional NOT statement
我想过滤值列表。根据变量的状态,我想 return 过滤器的正面或负面结果。示例:
def foo(it, my_condition):
return [s for s in it if (s.startswith("q") if my_condition else not s.startswith("q"))]
foo(["The", "quick", "brown", "fox"], my_condition=True)
所以在 my_condition=True
我得到 ["quick"]
并且在 my_condition=False
我得到 ["The", "brown", "fox"]
.
我不喜欢这个实现的部分是:(s.startswith("q") if filter else not s.startswith("q"))
。它包含重复代码,并且在其他简洁的列表理解中占用了大量 space。我真正想要的只是在 if
之后插入一个 not
,具体取决于 filter
变量的状态。
是否有更漂亮/更干净的解决方案?如果可能的话,我想在这种情况下避免 lambda 表达式的计算开销。
只需将startswith
的结果与布尔参数进行比较即可:
def foo(it, keep_matches):
return [s for s in it if s.startswith("q") == keep_matches]
注意:不要调用你的变量 filter
因为这是一个 built-in 函数来过滤迭代,我改变了一个更明确的名称(不确定这是最好的选择,但更好比 flag
或 filter
)
我想过滤值列表。根据变量的状态,我想 return 过滤器的正面或负面结果。示例:
def foo(it, my_condition):
return [s for s in it if (s.startswith("q") if my_condition else not s.startswith("q"))]
foo(["The", "quick", "brown", "fox"], my_condition=True)
所以在 my_condition=True
我得到 ["quick"]
并且在 my_condition=False
我得到 ["The", "brown", "fox"]
.
我不喜欢这个实现的部分是:(s.startswith("q") if filter else not s.startswith("q"))
。它包含重复代码,并且在其他简洁的列表理解中占用了大量 space。我真正想要的只是在 if
之后插入一个 not
,具体取决于 filter
变量的状态。
是否有更漂亮/更干净的解决方案?如果可能的话,我想在这种情况下避免 lambda 表达式的计算开销。
只需将startswith
的结果与布尔参数进行比较即可:
def foo(it, keep_matches):
return [s for s in it if s.startswith("q") == keep_matches]
注意:不要调用你的变量 filter
因为这是一个 built-in 函数来过滤迭代,我改变了一个更明确的名称(不确定这是最好的选择,但更好比 flag
或 filter
)