如何控制 python 中迭代器结果的顺序
How to control order of result from iterator in python
我使用pathlib.Path().iterdir()
获取路径的子字典。
/home/yuanyi/workspace/app
下有4个文件夹:01
、02
、03
、04
.
from pathlib import Path
for subdir in Path('/home/yuanyi/workspace/app').iterdir():
print(subdir)
但是结果没有排序
/home/yuanyi/workspace/app/02
/home/yuanyi/workspace/app/03
/home/yuanyi/workspace/app/01
/home/yuanyi/workspace/app/00
为什么结果不是以下内容:
/home/yuanyi/workspace/app/01
/home/yuanyi/workspace/app/02
/home/yuanyi/workspace/app/03
/home/yuanyi/workspace/app/04
我想知道迭代器是如何工作的,以及获得有序结果的最佳方法是什么。
我想你应该从中找出结果,
>>> l = ['/home/yuanyi/workspace/app/02',
'/home/yuanyi/workspace/app/03', '/home/yuanyi/workspace/app/01']
>>> for i in sorted(l, key=lambda m: int(m.split('/')[-1])):
print i
/home/yuanyi/workspace/app/01
/home/yuanyi/workspace/app/02
/home/yuanyi/workspace/app/03
>>>
或
for i in sorted(l, key=lambda m: int(m.split(os.sep)[-1])):
print i
您可以使用 "sorted()"
Built-in Functions Python - sorted()
from pathlib import Path
for subdir in sorted(Path('/some/path').iterdir()):
print(subdir)
注意: @NamitJuneja 指出,这将遍历生成器更改为遍历列表。因此,如果内存中有大量文件,将它们全部加载到内存中(通过将它们加载到列表中)可能会导致问题。
在我的 Mac 上,iterdir() 方法 returns 列表已经排序。所以这看起来取决于系统。 OS 你在用什么?
我使用pathlib.Path().iterdir()
获取路径的子字典。
/home/yuanyi/workspace/app
下有4个文件夹:01
、02
、03
、04
.
from pathlib import Path
for subdir in Path('/home/yuanyi/workspace/app').iterdir():
print(subdir)
但是结果没有排序
/home/yuanyi/workspace/app/02
/home/yuanyi/workspace/app/03
/home/yuanyi/workspace/app/01
/home/yuanyi/workspace/app/00
为什么结果不是以下内容:
/home/yuanyi/workspace/app/01
/home/yuanyi/workspace/app/02
/home/yuanyi/workspace/app/03
/home/yuanyi/workspace/app/04
我想知道迭代器是如何工作的,以及获得有序结果的最佳方法是什么。
我想你应该从中找出结果,
>>> l = ['/home/yuanyi/workspace/app/02',
'/home/yuanyi/workspace/app/03', '/home/yuanyi/workspace/app/01']
>>> for i in sorted(l, key=lambda m: int(m.split('/')[-1])):
print i
/home/yuanyi/workspace/app/01
/home/yuanyi/workspace/app/02
/home/yuanyi/workspace/app/03
>>>
或
for i in sorted(l, key=lambda m: int(m.split(os.sep)[-1])):
print i
您可以使用 "sorted()"
Built-in Functions Python - sorted()
from pathlib import Path
for subdir in sorted(Path('/some/path').iterdir()):
print(subdir)
注意: @NamitJuneja 指出,这将遍历生成器更改为遍历列表。因此,如果内存中有大量文件,将它们全部加载到内存中(通过将它们加载到列表中)可能会导致问题。
在我的 Mac 上,iterdir() 方法 returns 列表已经排序。所以这看起来取决于系统。 OS 你在用什么?