Python 如何并行遍历n个列表?

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 目前我一直都是手工操作,但我真的很想知道如何更优雅地操作,

对于“如何并行遍历2个列表”已经有很多答案。然而,我正试图找出如何遍历任意数量的列表

例如,下面要求我事先知道我有多少个列表

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], ...)