Python是否有条件NOT语句

时间:2018-02-26 14:25:22

标签: python python-3.x boolean-expression

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

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"))。它包含重复的代码,并在一个简洁的列表理解中占用了大量空间。我真正想要的只是在not之后插入if,具体取决于filter变量的状态。

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

1 个答案:

答案 0 :(得分:6)

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

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

注意:不要调用你的变量filter,因为这是一个过滤迭代的内置函数,我改为更明确的名称(不确定它是最好的选择,但它比{{1更好}或flag