代码之家  ›  专栏  ›  技术社区  ›  F.Lira

在同一行的“for”中编译“if”

  •  0
  • F.Lira  · 技术社区  · 6 年前

    当然,只是为了好奇和知识。 你有什么建议把这两行代码编译成一行吗?

    我现在拥有的:

    for files in os.listdir(path):
        if files.endswith("geneclusters.txt"):
    

    我想要得到的是:

    for (files in os.listdir(path)) if files.endswith("geneclusters.txt"):
    

    有什么建议吗?

    3 回复  |  直到 6 年前
        1
  •  1
  •   MisterMiyagi    6 年前

    不能合并 if 陈述成 for 陈述。但是,可以使用生成器 表达 在一个 对于 陈述。

    #            V --- generator expression ---------------------------------------------- V
    for files in (files for files in os.listdir(path) if files.endswith("geneclusters.txt")):
        ...
    

    请注意,没有性能优势,事实上这通常是较慢的。最重要的是,它通常不太可读。

    使用列表理解,以 [] 而不是 () ,对于此类用例。它在内存中创建整个中间列表。

        2
  •  1
  •   blhsing    6 年前

    你可以使用列表理解:

    for files in [f for f in os.listdir(path) if f.endswith("geneclusters.txt")]:
    
        3
  •  0
  •   Nordle    6 年前

    当然(使用列表理解),这取决于您接下来想做什么:

    for file in [f for f in os.listdir(path) if f.endswith("geneclusters.txt")]: