我正在尝试制作一个可以给我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)
。为什么?
答案 0 :(得分:2)
就像您曾经说过的,您要在每次迭代中创建生成器。您需要在每次迭代中对其进行迭代:
gen = generador()
for _ in range(27):
print(next(gen))
尽管itertools.product
会为您做到这一点:
def generador():
yield from itertools.product(range(3), repeat=3)
答案 1 :(得分:1)
您需要将生成器锁存到一个变量中,然后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))