Python是否有条件NOT语句

kla*_*ann 2 python boolean-expression python-3.x

我想过滤一个值列表.根据变量的状态,我想返回过滤器的正或负结果.例:

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)
Run Code Online (Sandbox Code Playgroud)

所以,my_condition=True我得到了["quick"],my_condition=False我得到了["The", "brown", "fox"].

我不喜欢的实现是这部分:(s.startswith("q") if filter else not s.startswith("q")).它包含重复的代码,并在一个简洁的列表理解中占用了大量空间.我真正想要的只是插入notif,根据不同的状态filter变量.

这有更漂亮/更干净的解决方案吗?如果可能的话,我想在这种情况下避免lambda表达式的计算开销.

Jea*_*bre 6

只需将结果startswith与布尔参数进行比较:

def foo(it, keep_matches):
    return [s for s in it if s.startswith("q") == keep_matches]
Run Code Online (Sandbox Code Playgroud)

注意:不要调用你的变量,filter因为这是一个内置函数来过滤iterables,我换了一个更明确的名字(不确定它是最好的选择,但它比flagor 更好filter)