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
,因为它会与内置名称混淆。不过这里没有什么坏处,因为它是一个局部变量。
是否可以在同时遍历多个目录的同时追加到不同的列表?我的代码:
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
,因为它会与内置名称混淆。不过这里没有什么坏处,因为它是一个局部变量。