在循环对象挂起系统上使用list()

问题描述 投票:0回答:1

我正在尝试遍历数组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)),则整个系统几乎都将挂起。

这里发生了什么,如何在aa调用中不使用它而遍历for

python itertools cycle
1个回答
0
投票

由于循环无限进行,因此您已经发现调用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))

0
投票

您需要实际遍历整个循环,例如:

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 b, a_row in zip(bb, c_aa):
  print(b, a_row)
© www.soinside.com 2019 - 2024. All rights reserved.