regex 列表解析中的两个for循环

wko9yo5t  于 2023-08-08  发布在  其他
关注(0)|答案(1)|浏览(89)

对于一个项目,我想从文档路径中获取指向afile的单词,并在列表中返回它们。我可以通过使用列表解析、正则表达式和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循环for i in range...也放在上面的列表解析中。我该怎么做?

k0pti3hp

k0pti3hp1#

只需观察一下,对于列表解析,for循环的顺序与您通常编写它们的顺序相同。所以呢

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

字符串
将成为

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


有了这些知识,重写任何循环到一个理解就变得非常容易了。你把末端放在前面,然后把for放在后面。因为你用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。现在,您将始终为每个文件获得相同的结果。:)

相关问题