Python,循环时附加到不同的列表

Python, appending to different lists while looping

是否可以在同时遍历多个目录的同时追加到不同的列表?我的代码:

def trav(dir_1, dir_2):
    data_0= []
    data_1 = []
    for dir in [dir_1, dir_2]:
        for path, dirs, files in os.walk(dir):
             for file in files:
                 for line in file:
                      data_0.append(line)

如何使用一个循环从 dir_1 -> data_0 和 appand dir_2 -> data_1 追加行,我知道我可以编写两个单独的方法但是想知道是否有更有效、更简单的方法。我尝试使用 itertools 中的链,但没有成功,有什么建议吗?

如果你不想要两个循环也没关系,你可以简单地执行一个 if

def trav(dir_1, dir_2):
    data_0 = []
    data_1 = []
    for dir in [dir_1, dir_2]:
        current_dir = dir
        for path, dirs, files in os.walk(dir):
             for file in files:
                 for line in file:
                      if current_dir == dir_1:
                          data_0.append(line)
                      else:
                          data_1.append(line)

另一种方式可能是:

def trav(dir_1, dir_2):
    data_0 = []
    data_1 = []
    for dir in [dir_1, dir_2]:
        if dir == dir_1:
            data = data_0
        else:
            data = data_1
        for path, dirs, files in os.walk(dir):
             for file in files:
                 for line in file:
                     data.append(line)

第二个 运行 比第一个快,因为需要比较的次数较少。

好吧,你可以把数据变成字典:

def trav(dir_1, dir_2):
    data = {}
    data[dir_1] = []
    data[dir_2] = []
    for dir in [dir_1, dir_2]:
        for path, dirs, files in os.walk(dir):
             for file in files:
                 for line in file:
                      data[dir].append(line)

或者您可以将数据设为 collections.defaultdict(list)。这样您就不必将条目初始化为空列表。另外,我建议您不要使用名称 dir,因为它会与内置名称混淆。不过这里没有什么坏处,因为它是一个局部变量。