我正在尝试生成一个可以给我3个数字的排列的生成器
def generador():
for i in range(3):
for j in range(3):
for k in range(3):
yield i,j,k
带有for循环for a,b,c in generador():
,它的工作还不错,但是:
for _ in range(27):
print(next(generador()))
仅再次打印(0,0,0)
。为什么?
[您需要将生成器锁存到一个变量,然后将其锁定为next
,这样您才能通过同一实例,否则,每个循环都要经过一个新实例,因此得到0,0,0
def generador():
for i in range(3):
for j in range(3):
for k in range(3):
yield i,j,k
a = generador()
for _ in range(27):
print(next(a))
据说您是在每次迭代中创建生成器。您需要在每次迭代中对其进行迭代:
gen = generador()
for _ in range(27):
print(next(gen))
尽管itertools.product
会为您做到这一点:
def generador():
yield from itertools.product(range(3), repeat=3)