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")).它包含重复的代码,并在一个简洁的列表理解中占用了大量空间.我真正想要的只是插入not后if,根据不同的状态filter变量.
这有更漂亮/更干净的解决方案吗?如果可能的话,我想在这种情况下避免lambda表达式的计算开销.
只需将结果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)
| 归档时间: |
|
| 查看次数: |
71 次 |
| 最近记录: |