Python 用于迭代numpy数组列表行的生成器

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

我很难找到一个生成器来迭代列表中存储的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)))
但我想提出一个生成器,它可以用更少的代码来实现这一点。我尝试了以下方法,该方法有效,但数组行数已硬编码:

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']

谢谢你的回答。你能告诉我为什么我的例子不起作用吗?我很高兴。记住星号中的部分,你就不会弄错对列表的理解。