使用 for 循环将列表拆分为子列表
Splitting a list into sublists using a for loop
我有一个通过 pathlib.glob() 获得的文件列表。从该列表中,我需要根据它们的扩展名(因此首先是 .1,然后是 .2,等等)分块使用它们。
我只能显示第一组文件,之后一直显示空列表。我知道我可以通过改变我的初始 glob 来解决这个问题,但我没有看到这个问题意味着我不明白引擎盖下的东西是如何工作的,我需要一些帮助来解决它。
这是我第一次尝试使用列表理解:
Import sys, os
from pathlib import Path
folder = Path(os.getcwd())
files = folder.glob('*dat*')
for i in range(4):
extension = '*.'+str(i+1)
cat = [x for x in files if x.match(extension)]
print(cat)
打印[带 .1 的文件][][][]
我使用过滤器得到相同的输出
for i in range(4):
extension = '.'+str(i+1)
cat = list(filter(lambda x:str(x).endswith(extension), files))
显然我遗漏了什么,但我不知道是什么。
在我看来,这是因为 files
是一个 生成器 。所以在 for
循环的第一次迭代的列表理解中,它的内容已经被消耗,因此在随后的迭代中没有更多的项目剩下!
所以您可能想先从 files
中列出:尝试将
files = list(files)
就在 for
循环之前。
我有一个通过 pathlib.glob() 获得的文件列表。从该列表中,我需要根据它们的扩展名(因此首先是 .1,然后是 .2,等等)分块使用它们。
我只能显示第一组文件,之后一直显示空列表。我知道我可以通过改变我的初始 glob 来解决这个问题,但我没有看到这个问题意味着我不明白引擎盖下的东西是如何工作的,我需要一些帮助来解决它。
这是我第一次尝试使用列表理解:
Import sys, os
from pathlib import Path
folder = Path(os.getcwd())
files = folder.glob('*dat*')
for i in range(4):
extension = '*.'+str(i+1)
cat = [x for x in files if x.match(extension)]
print(cat)
打印[带 .1 的文件][][][]
我使用过滤器得到相同的输出
for i in range(4):
extension = '.'+str(i+1)
cat = list(filter(lambda x:str(x).endswith(extension), files))
显然我遗漏了什么,但我不知道是什么。
在我看来,这是因为 files
是一个 生成器 。所以在 for
循环的第一次迭代的列表理解中,它的内容已经被消耗,因此在随后的迭代中没有更多的项目剩下!
所以您可能想先从 files
中列出:尝试将
files = list(files)
就在 for
循环之前。