我想更改下面的代码
for directory, dirs, files in os.walk(directory_1):
do_something()
for directory, dirs, files in os.walk(directory_2):
do_something()
到此代码:
for directory, dirs, files in os.walk(directory_1) + os.walk(directory_2):
do_something()
我得到了错误:
不支持+:'generator'和'generator'的操作数类型
如何在Python中连接两个生成器?
如果你想保持生成器的分离,但仍然在同一时间遍历它们,你可以使用zip():
注意:迭代停止在两个生成器中较短的一个
例如:
for (root1, dir1, files1), (root2, dir2, files2) in zip(os.walk(path1), os.walk(path2)):
for file in files1:
#do something with first list of files
for file in files2:
#do something with second list of files
您可以将任何生成器放入列表中。虽然不能组合生成器,但可以组合列表。这样做的缺点是实际上在内存中创建了3个列表,但优点是可读性非常好,不需要导入,并且是单行习惯用法。
OP解决方案。
for directory, dirs, files in list(os.walk(directory_1)) + list(os.walk(directory_2)):
do_something()
a = range(20)
b = range(10,99,3)
for v in list(a) + list(b):
print(v)
如果你只需要做一次,不希望再导入一个模块,有一个简单的解决方案…
只做:
for dir in directory_1, directory_2:
for directory, dirs, files in os.walk(dir):
do_something()
如果你真的想“联接”两个生成器,那么做:
for directory, dirs, files in (
x for osw in [os.walk(directory_1), os.walk(directory_2)]
for x in osw
):
do_something()