Python 如何并行遍历n个列表?
对于“如何并行遍历2个列表”已经有很多答案。然而,我正试图找出如何遍历任意数量的列表 例如,下面要求我事先知道我有多少个列表Python 如何并行遍历n个列表?,python,Python,对于“如何并行遍历2个列表”已经有很多答案。然而,我正试图找出如何遍历任意数量的列表 例如,下面要求我事先知道我有多少个列表 for f, b in zip(foo, bar): print(f, b) 但是我使用os.listdir()来获得N个子文件夹,然后我想并行地遍历所有这些子文件夹 for (every nth element) in (each subfolder found): do something 目前我一直都是手工操作,但我真的很想知道如何更优雅地操作,
for f, b in zip(foo, bar):
print(f, b)
但是我使用os.listdir()
来获得N个子文件夹,然后我想并行地遍历所有这些子文件夹
for (every nth element) in (each subfolder found):
do something
目前我一直都是手工操作,但我真的很想知道如何更优雅地操作,也就是说,不知道要迭代多少个列表
谢谢 对于您的子文件夹列表:
subfolders = os.listdir(some_path)
可以围绕第一个for循环创建第二个for循环:
# iterate through subfolders of some_path
for subfolder in subfolders:
#iterate through elements in subfolder
for element in os.listdir(os.path.join(some_path, subfolder):
# you take it from here
您可能还想查看一下
os.walk
以递归方式遍历目录树您只需解压缩列表列表:
list_of_lists = [[1,2,3], [2,3,4], [5,6,7]]
for x in zip(*list_of_lists):
for y in x:
print(y)
1
2
4
2
3
5
3
4
6
您仍然可以使用
zip
,因为它接受两个以上的参数。给定一个列表列表,其中您希望在循环中迭代其i'th
参数:
lists = [[1, 2, 3, 4, 5], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5]]
for parallel in zip(*lists):
print(parallel)
印刷品:
(1, 1, 1)
(2, 2, 2)
(3, 3, 3)
(4, 4, 4)
(5, 5, 5)
或者,使用问题描述的变体:
import os
subdirs = [os.listdir(f) for f in os.listdir(my_dir) if os.path.isdir(os.path.join(my_dir, f))]
for parallel in zip(*subdirs):
# work on them in parallel
应该注意的是,zip
在它得到的最短列表的末尾截断。如果要用None
s填充每个列表,则应使用itertools.zip\u longest
,如下所示:
from itertools import zip_longest
# get subdirs same as before
for parallel in zip_longest(*subdirs):
print([f for f in parallel if f is not None]) # don't show padded entries
您无需提前知道您将拥有多少列表:
for subdirs in zip(*(os.listdir(p) for p in root_dirs)):
for paths in zip(*(os.listdir(p) for p in root_dirs))::
do_something(paths) # paths is a tuple like (paths[0], paths[1], ...)