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 函数来过滤迭代,我改变了一个更明确的名称(不确定这是最好的选择,但更好比 flagfilter)