代码之家  ›  专栏  ›  技术社区  ›  levant pied

带有for/if的Python转换和过滤器列表

  •  1
  • levant pied  · 技术社区  · 4 年前

    是否有一种方法可以在单个列表中转换和过滤,即:

    def transform(el):
        if some_condition(el):
            return None
    
        return complex_logic(el)
    
    def main():
        transformed = [transform(el) for el in some_list if transform(el) != None]
    

    但是不要打电话 transform 两次一、 e.将其分配给变量,类似于(在伪Python中):

    def main():
      transformed = [transformed for el in some_list let transformed = transform(el) if transformed != None]
    
    2 回复  |  直到 4 年前
        1
  •  2
  •   S.B Daniel Pryden    4 年前

    你可以使用海象操作符 := :

    def main():
        return [res for el in some_list if (res := transform(el)) is not None]
    

    这样一来,调用 transform 函数存储在 res 然后你可以在你的理解列表的表达部分使用它。

        2
  •  2
  •   Kelly Bundy    4 年前

    代替 let transformed = transform(el) 具有 for transformed in [transform(el)] .