在循环对象上使用 list() 挂起系统
Using list() on cycle object hangs system
我正在尝试循环遍历数组 aa
的元素,其中 for
块不是应用于它而是应用于另一个数组 bb
.
import numpy as np
from itertools import cycle
aa = np.array([[399., 5., 9.], [9., 35., 2.], [.6, 15., 8842.]])
c_aa = cycle(aa)
bb = np.array([33, 1., 12, 644, 234, 77, 194, 70])
for _ in bb:
print(c_aa)
这不起作用,它只是输出:
<itertools.cycle object at 0x7f8d207b1640>
<itertools.cycle object at 0x7f8d207b1640>
<itertools.cycle object at 0x7f8d207b1640>
<itertools.cycle object at 0x7f8d207b1640>
<itertools.cycle object at 0x7f8d207b1640>
<itertools.cycle object at 0x7f8d207b1640>
<itertools.cycle object at 0x7f8d207b1640>
<itertools.cycle object at 0x7f8d207b1640>
但是,如果我更改 print(list(c_aa))
的最后一行,我的整个系统几乎都会挂起。
这是怎么回事?如何在 for
调用中不使用它来迭代 aa
?
由于循环无限进行,调用 list()
是个坏主意,正如您所发现的那样。您可以在迭代器上调用 next()
来获取下一个值,但是:
import numpy as np
from itertools import cycle
aa = np.array([[399., 5., 9.], [9., 35., 2.], [.6, 15., 8842.]])
c_aa = cycle(aa)
bb = np.array([33, 1., 12, 644, 234, 77, 194, 70])
for _ in bb:
print(next(c_aa))
您需要实际迭代循环,例如:
for b, a_row in zip(bb, cycle(aa)):
print(b, a_row)
输出:
33.0 [399. 5. 9.]
1.0 [ 9. 35. 2.]
12.0 [6.000e-01 1.500e+01 8.842e+03]
644.0 [399. 5. 9.]
234.0 [ 9. 35. 2.]
77.0 [6.000e-01 1.500e+01 8.842e+03]
194.0 [399. 5. 9.]
70.0 [ 9. 35. 2.]
我正在尝试循环遍历数组 aa
的元素,其中 for
块不是应用于它而是应用于另一个数组 bb
.
import numpy as np
from itertools import cycle
aa = np.array([[399., 5., 9.], [9., 35., 2.], [.6, 15., 8842.]])
c_aa = cycle(aa)
bb = np.array([33, 1., 12, 644, 234, 77, 194, 70])
for _ in bb:
print(c_aa)
这不起作用,它只是输出:
<itertools.cycle object at 0x7f8d207b1640>
<itertools.cycle object at 0x7f8d207b1640>
<itertools.cycle object at 0x7f8d207b1640>
<itertools.cycle object at 0x7f8d207b1640>
<itertools.cycle object at 0x7f8d207b1640>
<itertools.cycle object at 0x7f8d207b1640>
<itertools.cycle object at 0x7f8d207b1640>
<itertools.cycle object at 0x7f8d207b1640>
但是,如果我更改 print(list(c_aa))
的最后一行,我的整个系统几乎都会挂起。
这是怎么回事?如何在 for
调用中不使用它来迭代 aa
?
由于循环无限进行,调用 list()
是个坏主意,正如您所发现的那样。您可以在迭代器上调用 next()
来获取下一个值,但是:
import numpy as np
from itertools import cycle
aa = np.array([[399., 5., 9.], [9., 35., 2.], [.6, 15., 8842.]])
c_aa = cycle(aa)
bb = np.array([33, 1., 12, 644, 234, 77, 194, 70])
for _ in bb:
print(next(c_aa))
您需要实际迭代循环,例如:
for b, a_row in zip(bb, cycle(aa)):
print(b, a_row)
输出:
33.0 [399. 5. 9.]
1.0 [ 9. 35. 2.]
12.0 [6.000e-01 1.500e+01 8.842e+03]
644.0 [399. 5. 9.]
234.0 [ 9. 35. 2.]
77.0 [6.000e-01 1.500e+01 8.842e+03]
194.0 [399. 5. 9.]
70.0 [ 9. 35. 2.]