代码之家  ›  专栏  ›  技术社区  ›  Jones1220

列表理解中的两个for循环

  •  0
  • Jones1220  · 技术社区  · 6 年前

    对于一个项目,我想把单词从文档路径中取出,然后返回到一个列表中。我可以通过使用列表理解、regex和for循环来实现这一点:

    for path, subdir, files in os.walk(directory):
        for file in files:
            themen = [x for x in re.findall(r'[^\W\d_]+',path)]
            themen_final = []
            for i in range(4,len(themen)):
                themen_final.append(themen[i])
            print(themen_final)
    

    这很好,但我相信,你可以 for i in range... 也在上面的理解列表中。我该怎么做?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Roelant    6 年前

    你只要看一个清单就明白了, for 循环的顺序与通常编写它们的顺序相同。所以

    for a in range(4):
        for b in a:
            pass
    

    会变成

    [pass for a in range(4) for b in a]
    

    有了这些知识,就很容易将任何循环重写为理解。你把末端放在前面然后把 对于 在它后面。因为你列了一个小单子 themen_final = [] 我们从以下几点开始:

    for path, subdir, files in os.walk(directory):
        for file in files:
            themen_final = [themen for themen in re.findall(r'[^\W\d_]+',path)[:4]]
    

    再做一次同样的把戏:

    [[themen for themen in re.findall(r'[^\W\d_]+', path)[:4]] for file in files for path, _, files in os.walk(directory)]
    

    尽管我甚至希望你对 re.findall(r'[^\W\d_]+', path + file) 或者你可以不用 for file in files 是的。现在,对于每个文件,都会得到相同的结果。:)