我想使用zip遍历各个生成器的元素进行锁定。只有在运行时才知道哪些发电机以及将有多少个发电机。但是,我不知道如何将其传递到zip中,因为任何列表都将被解释为可迭代的列表,而不是必须同时迭代的可迭代列表。
正确的方法是什么?此外,当直到运行时才知道输出编号时,解压缩输出的正确方法是什么?下面是我尝试过的]
from typing import List
l_1 = [1, 2, 3]
l_10 = [10, 20, 30]
l_100 = [100, 200, 300]
def gen(l_: List):
for i in l_:
yield i
# Standard: works fine as expected
for i, j, k in zip(gen(l_1), gen(l_10), gen(l_100)):
print('i={}, j={} k={}'.format(i,j,k))
# List of generators prepared at run time. Does not work
gens = [gen(l_1), gen(l_100)]
receive = [None] * len(gens)
for receive in zip(gens):
print(receive)
输出为
i=1, j=10 k=100
i=2, j=20 k=200
i=3, j=30 k=300
(<generator object gen at 0x000001C3DB93C258>,)
(<generator object gen at 0x000001C3DB93C620>,)
所需的输出是
i=1, j=10 k=100
i=2, j=20 k=200
i=3, j=30 k=300
[1, 100]
[2, 200]
[3, 300]
我如何获得zip来识别gens不是要迭代的迭代器,而是必须在锁定步骤中迭代的可迭代项列表?
这只是一个小小的更改,要传递可迭代项列表以进行压缩,您必须使用*
对其进行解压缩>
# List of generators prepared at run time. Does not work
gens = [gen(l_1), gen(l_100)]
receive = [None] * len(gens)
for receive in zip(*gens):
print(receive)