Python 用于迭代numpy数组列表行的生成器
我很难找到一个生成器来迭代列表中存储的numpy数组行 我可以通过使用常规for循环来实现这一点:Python 用于迭代numpy数组列表行的生成器,python,list,numpy,indexing,generator,Python,List,Numpy,Indexing,Generator,我很难找到一个生成器来迭代列表中存储的numpy数组行 我可以通过使用常规for循环来实现这一点: list = [numpy.array([[0, 1, 2, 3, 4], [5, 6, 7, 8, 9]]), numpy.array([[0, -1, -2, -3, -4], [-5, -6, -7, -8, -9]])] for array in list: for row in array: print(' '.join(map(str, row
list = [numpy.array([[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9]]), numpy.array([[0, -1, -2, -3, -4],
[-5, -6, -7, -8, -9]])]
for array in list:
for row in array:
print(' '.join(map(str, row)))
但我想提出一个生成器,它可以用更少的代码来实现这一点。我尝试了以下方法,该方法有效,但数组行数已硬编码:
mygen = (' '.join(map(str, i[j])) for j in range(2) for i in list)
for r in mygen:
print (r)
现在,当我尝试将
范围(2)
更改为范围(I.shape[0])
时,我得到了索引器:元组索引超出范围。为什么此代码不起作用?您可以使用itertools.chain.from\u iterable
:
>>> import itertools
>>> lst = [numpy.array([[0, 1, 2, 3, 4],
... [5, 6, 7, 8, 9]]), numpy.array([[0, -1, -2, -3, -4],
... [-5, -6, -7, -8, -9]])]
>>> for r in itertools.chain.from_iterable(lst):
... print(' '.join(map(str, r)))
0 1 2 3 4
5 6 7 8 9
0 -1 -2 -3 -4
-5 -6 -7 -8 -9
你的尝试几乎是对的。您遇到的问题与嵌套列表中索引的优先级有关。
根据,您应该使用嵌套列表理解,如下所示:
The form [... for x... for y...] nests, with the **last index
varying fastest**, just like nested for loops.
因此,如果在列表中更改for循环的顺序,则它将起作用:
mygen = (' '.join(map(str, i[j])) for i in list for j in range(i.shape[0]) )
>>> list(mygen)
['0 1 2 3 4', '5 6 7 8 9', '0 -1 -2 -3 -4', '-5 -6 -7 -8 -9']
谢谢你的回答。你能告诉我为什么我的例子不起作用吗?我很高兴。记住星号中的部分,你就不会弄错对列表的理解。